1

我在UICollectionViewCellUIView上使用UIPanGestureRecognizer。我正在使用translationInView方法獲取沿X軸的平移並向左和向右滑動UIView。它工作正常,但現在我無法在CollectionView中上下滾動,如果我的手指在單元格上。有沒有辦法讓PanGestureRecognizer通過垂直滾動到UICollectionView在UICollectionViewCell中滑動UIView會阻止滾動功能

我想複製在iOS的Reeder.app中看到的滑動。

+0

你好,你可以驗證解決方案建議是否工作?它似乎適用於其他用戶。謝謝! – batkru 2014-11-24 04:29:49

回答

8

一旦UIPanGestureRecognizer在您的UIView中激活,由於您的UICollectionView不再接收觸摸,因此不再通過響應者鏈轉發觸摸。

您可以嘗試設置您的UIView作爲您的UIPanGestureRecognizer的代表,並放置UIPanGestureRecognizer應激活的邏輯。你必須實現委託的方法在你的UIView:

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer; 

例如與下面你的代碼會告訴它不激活,如果在視圖上的y軸的速度比的x軸的速度更大(因此發送觸摸到它下面的UICollectionView

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{ 

    UIPanGestureRecognizer *recognizer = (UIPanGestureRecognizer *)gestureRecognizer; 
    CGPoint velocity =[recognizer velocityInView:self]; 
    if(abs(velocity.y)>=(abs(velocity.x))){ 
     return NO; 
    }else return YES; 

} 

希望這是有幫助的。

+0

完美的作品!謝謝 – n8tr 2014-07-09 00:07:15

+0

解決了我的問題,謝謝! – 2014-08-14 16:58:33

+0

這很好。我需要將其更改爲「velocityInView:self.view」以在我的視圖控制器中工作。此外,由於這是針對UICollectionViewCell上的平移手勢,因此在collectionView中創建單元格時設置委託很方便:cellForItemAtIndexPath: – Indi 2014-11-21 02:36:01