2

我在網上搜索了很多,但一直沒有找到具體的東西。我想這不是一個很大的問題,但我無法弄清楚。如何檢測以編程方式觸摸哪個子視圖

我正在使用UIImageView「A」,然後添加一些其他UIImageView作爲該「A ImageView」的子視圖。所有子視圖都啓用了UserInteraction。現在在TouchBegan方法中,我得到了「A ImageView」的子視圖數組,並將其與Touch.view進行比較。但touch.view始終等於父項,即「A ImageView」,並且永遠不會返回所觸摸的子視圖。

所以,請指導我如何檢測哪個子視圖被觸摸,然後進一步我將通過更新其中心將該子視圖移動到新的位置。

感謝大家提前並期待您的回覆。

問候,

回答

0

恐怕是錯誤的使用ImageView的按鈕,但如果你堅持這樣做,請嘗試以下:

您可以通過繼承的imageview的

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    UIView *hittedView = [super hitTest: point withEvent: event]; 
    NSLog (@"self=<%p>, hitted=<%p>", self, hittedView); 
    return hittedView; 
} 
重新寫入則hitTest方法

添加日誌以查看默認hitTest是否返回正確的子視圖。

如果沒有,我怕你有你自己寫的代碼則hitTest:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    for (UIView *view in self.subviews) { 
     if (CGRectContainsPoint(view.frame, point)) { 
      return view; 
     } 
    } 
    return self 
} 

本文對您有用: http://developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/Introduction/Introduction.html

0

啓用了子視圖,如果是的互動,你嘗試過給單獨的標籤,每一個主要觀點和你動態地添加和通過查看他們的標籤驗證觸摸子視圖...

+0

感謝yunas您的回覆 是的userInteraction已啓用,但我沒有嘗試過這個標籤邏輯,讓我試試,我會盡快更新你的結果。 –

+0

我從2開始爲子視圖添加標籤,觸及的視圖總是標記值爲0.這甚至不是任何圖像視圖的有效標記,甚至不是父UIImageView。所以它意味着它總是檢測self.view作爲觸摸視圖。 –

+0

嗯,我假設你正在做一些非常錯誤的事情。我已經創建了一個演示項目,你可以從http://cl.ly/GRnl下載它,並且在控制檯上你會看到self.view的標籤爲1000,imageview爲500根據設置。 – yunas