我有一個的UIButton「BN」和UIActivityIndicator「人工智能」,這是按鈕(ai.center = bn.center
)的上方。活動指示器上述按鈕防止點擊識別
只要人工智能是可見的,生動活潑的,我不能按下按鈕下方AI的幀而是出於我可以的範圍內的。
我必須GestureRecognition添加到人工智能或者是有沒有點擊「人工智能」一個更聰明的方法。
親切的問候。 $ H @ RKY
我有一個的UIButton「BN」和UIActivityIndicator「人工智能」,這是按鈕(ai.center = bn.center
)的上方。活動指示器上述按鈕防止點擊識別
只要人工智能是可見的,生動活潑的,我不能按下按鈕下方AI的幀而是出於我可以的範圍內的。
我必須GestureRecognition添加到人工智能或者是有沒有點擊「人工智能」一個更聰明的方法。
親切的問候。 $ H @ RKY
你能簡單地設置ai.userInteractionEnabled = NO;
嗎?無論如何,我很驚訝它啓用了活動指示器 - 這是一個標準組件還是您創建了子類?另一方面,它通常是糟糕的UI設計,它有一個被另一個視圖覆蓋的交互式元素,尤其是一個用於指示某事物「忙碌」的交互式元素,但在您的可點擊縮略圖圖像的示例中,這似乎是有道理的。
你需要重寫UIView的方法
在父視圖。如果命中在按鈕內,則返回按鈕,否則返回零。這是這種方法的討論的一部分:withEvent:方法:消息發送到每個子視圖,以確定哪個子視圖 應該接收的觸摸事件
該方法通過發送 pointInside遍歷視圖層次結構。如果pointInside:withEvent: 返回YES,則遍歷子視圖的層次結構;否則,視圖層次結構的 分支將被忽略。您很少需要自己調用此方法,但您可以覆蓋以隱藏 子視圖中的觸摸事件。
編輯:
假設你有一個UIView子類包含BN和AI,可以實現這樣的
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if (CGRectContainsPoint(bn.frame, point)) {
return bn;
}
return nil;
}
這樣你的按鈕將獲得觸摸事件的方法(如果他們是否在其框架內),無論它是否在頂部。你不需要做其他事情。
使用以下材料:
首先,UIActivityIndicator創建子類具有以下方法覆蓋:
@interface MyActivityIndicator: UIActivityIndicator
@end
@implementation MyActivityIndicator
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
return NO;
}
@end
之後,使用MyActivityIndicator無處不在您的項目,而不是UIActivityIndicator(在NIB文件或你的代碼,取決於你在哪裏創建它)
我認爲這也會起作用,但「jrturton的」答案要容易得多。 – Sharky
給我的UIDesign。我有一組縮略圖的按鈕,從互聯網上加載。雖然這是進行中,AI是動畫,但你應該能夠按下按鈕看到全屏圖像。按鈕頁面只是預覽。 這是一個標準的UIActivityIndicatorView,我也很驚訝它已啓用。似乎是默認情況下。現在它很好地工作。謝謝。 – Sharky
那確實有道理。我會修改我的答案! – jrturton