我有兩個滑動手勢識別器的視圖。一左一右。限定觸摸事件以查看
在這個視圖的頂部,我有另外兩個滑動手勢識別器的視圖。
我的問題是,我對第二個視圖做的任何刷卡也會發送到父視圖。
我該如何預防? 而且,如何防止在子視圖B中觸發的觸摸事件發送到父視圖A?
謝謝!
ps。對不起,如果這個問題以前問過..我之前問了一堆東西,但沒有工作..
我有兩個滑動手勢識別器的視圖。一左一右。限定觸摸事件以查看
在這個視圖的頂部,我有另外兩個滑動手勢識別器的視圖。
我的問題是,我對第二個視圖做的任何刷卡也會發送到父視圖。
我該如何預防? 而且,如何防止在子視圖B中觸發的觸摸事件發送到父視圖A?
謝謝!
ps。對不起,如果這個問題以前問過..我之前問了一堆東西,但沒有工作..
這可以很容易地完成與UIGestureRecognizer
的cancelsTouchesInView
屬性。在子視圖的識別器上將其設置爲YES
,這應該防止手勢傳播到父視圖。
我剛剛完成了可能會幫助其他人遇到此線程的解決方法。
基本前提是捕捉觸摸發生時的情況,並在觸摸發生在一組視圖內時刪除手勢。然後在手勢識別器處理手勢後重新添加手勢。
@interface TouchIgnorer : UIView
@property (nonatomic) NSMutableSet * ignoreOnViews;
@property (nonatomic) NSMutableSet * gesturesToIgnore;
@end
@implementation TouchIgnorer
- (id) init
{
self = [super init];
if (self)
{
_ignoreOnViews = [[NSMutableSet alloc] init];
_gesturesToIgnore = [[NSMutableSet alloc] init];
}
return self;
}
- (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
CGPoint relativePt;
for (UIView * view in _ignoreOnViews)
{
relativePt = [view convertPoint:point toView:view];
if (!view.isHidden && CGRectContainsPoint(view.frame, relativePt))
{
for (UIGestureRecognizer * gesture in _gesturesToIgnore)
{
[self removeGestureRecognizer:gesture];
}
[self performSelector:@selector(rebindGestures) withObject:self afterDelay:0];
break;
}
}
return [super pointInside:point withEvent:event];
}
- (void) rebindGestures
{
for (UIGestureRecognizer * gesture in _gesturesToIgnore)
{
[self addGestureRecognizer:gesture];
}
}
@end
如果我在子視圖中沒有任何手勢或觸摸識別器,該怎麼辦?我只是希望能夠按下按鈕並滾動而不觸發父母視圖識別器。 – 2012-03-15 00:09:43
有趣。我認爲你應該可以重寫子視圖中的touchesBegan方法來處理這個問題,但是在玩了幾分鐘後,我還沒有找到一個可行的解決方案。這個答案可能是你需要的http://stackoverflow.com/a/5234804/144755 – oltman 2012-03-15 16:39:36
謝謝你oltman。 – 2012-03-16 13:21:22