【问题标题】:Switch between gestures on a view with same touch在具有相同触摸的视图上切换手势
【发布时间】:2017-01-06 05:50:12
【问题描述】:

UICollectionView 中我添加了UIPanGestureRecognizer。起初UIPanGestureRecognizer 被禁用,我想在UICollectionViewcontentOffset.y 在滚动过程中达到某个值时启用它。我试图通过以下代码来实现这一点。但它仅适用于屏幕上的第二次触摸。当 contentOffset.y 为 44 时,我想在不松开手指的情况下使用手势。

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

【问题讨论】:

    标签: ios swift uicollectionview uigesturerecognizer uipangesturerecognizer


    【解决方案1】:

    是的。根据您的逻辑,它仅在第二次触摸时发生。尝试在 scrollView Delegate 方法中启用或禁用平移手势,如下所示。

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

    【讨论】:

    • 感谢人的回答。但我需要取下手指并再次触摸以处理该逻辑。
    【解决方案2】:

    在你的手势开始状态检查条件

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

    或者

    在 scrollView Delegate 方法中你也可以检查。检查下面

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

    【讨论】:

    • 感谢人的回答。要使用第一个回答手势,应启用,如果启用,则无法滚动。最主要的是在滚动过程中,我们应该放下手指并再次触摸以处理该逻辑。实际上,只有当 contentOffset.y 为 44 时,我才需要使用手势。
    • @sant05 更新答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多