2013-09-23 138 views
5

如果我有一個帶有子視圖的scrollView,並且子視圖有一個平移手勢識別器,則scrollView的平移手勢覆蓋子視圖的平移。我想要的是相反的,我認爲,所以我拖動一個子視圖,它將在滾動視圖內平移,但如果我觸摸另一個區域,滾動視圖將平常平移。有沒有簡單的方法來設置?UIScrollView覆蓋我的子視圖的平移手勢識別器

回答

12

這裏對我來說是什麼在起作用:

UIPanGestureRecognizer *subviewPanRecognizer = [[UIPanGestureRecognizer alloc] 
    initWithTarget:self action:@selector(panSubview:)]; 
[subview addGestureRecognizer:subviewPanRecognizer]; 

// play nice with subview's pan gesture 
[scrollView.panGestureRecognizer 
    requireGestureRecognizerToFail:subviewPanRecognizer]; 
+0

這似乎是默認行爲(這是我在UIScrollView實踐中觀察與UIImageView子視圖)。有人可以確認/體弱嗎? – Norswap

+1

它不適用於我 –

+0

工程很漂亮,特別是在子視圖上應用委託並實現'gestureRecognizerShouldBegin:'時。 –

0

覆蓋下面這兩個代表,

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ 
return YES; 

}

這將讓你認識到這兩個手勢,默認的回報是NO,所以我們需要覆蓋它並返回YES

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ 
if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) { 
    if ([otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) { 
     return NO; 
    }else{ 
     return YES; 
    } 
} 
return YES; 

}

在這個委託作爲你願意,你可以做任何事情,因爲它的名字gestureRecoginzer將需要由otherGestureRecognizer失敗,所有你需要做的是判斷什麼這兩種手勢中的一種並返回YES或NO。

相關問題