0

UICollectionView中我添加了UIPanGestureRecognizer。起初UIPanGestureRecognizer已禁用,我想在的contentOffset.y在滾動期間達到某個值時啓用它。我試圖通過以下代碼來實現此目的。但它只能在屏幕上進行第二次觸摸。當contentOffset.y爲44時,我不想摘下手指,我想用手勢工作。在相同觸摸的視圖之間切換手勢

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { 
    if collectionView.contentOffset.y == CGFloat(44) { 
     return false 
    } 
    return true 
} 

回答

0

是的。根據你的邏輯,它只發生在第二次觸摸。嘗試在下面的scrollView Delegate方法中啓用或禁用平移手勢。

func scrollViewDidScroll(scrollView: UIScrollView) { 
    if collectionView.contentOffset.y < CGFloat(44) { 
     panGesture.enabled = false 
    } 
    panGesture.enabled = true 
} 
+0

thanx男子的答案。但是我需要脫掉手指,然後再觸碰到這個邏輯。 – sant05

0

在你的手勢的開始狀態檢查車況

func gestureTap(sender : UIGestureRecognizer){   
    if sender.state == .began { 
     if collectionView.contentOffset.y == CGFloat(44) { 

     } else { 
     return 
     } 
    } 
} 

或者

,滾動型的委託方法你可以檢查了。下面的查詢

func scrollViewDidScroll(scrollView: UIScrollView) { 
    if collectionView.contentOffset.y < CGFloat(44) { 
     yourGesture.enabled = false 
    } else { 
    yourGesture.enabled = true 
    } 
} 
+0

thanx男子爲答案。要使用第一個應答手勢應啓用,如果啓用,則無法滾動滾動。主要的是在滾動期間,我們應該放下手指並再次觸摸該邏輯。實際上,只有當contentOffset.y是44時,我才需要使用手勢。 – sant05

+0

@ sant05更新回答 –