iOS:实现单指平移和两指平移手势?

Posted

技术标签:

【中文标题】iOS:实现单指平移和两指平移手势?【英文标题】:iOS: implement one-finger pan and two-finger pan gestures? 【发布时间】:2016-08-04 06:49:35 【问题描述】:

目标是针对同一个 SCNScene 实现两个平移手势:一个用一根手指,另一个用两根手指。

下面的代码不起作用。即使为手势分配了不同的选择器,单指平移功能也不会被调用。单指平底锅和双指平底锅都调用sceneViewPannedTwoFingers

从阅读其他问题看来,shouldRecognizeSimultaneouslyWithGestureRecognizer 可能是答案,但这些平底锅不会同时发生。它应该是单指平底锅或双指平底锅,不能同时使用。

如上所述,是否可以有两个平移手势?如果是这样,这样做的正确方法是什么?

    // Handle one-finger pans
    let panRecognizer = UIPanGestureRecognizer(target: self, action: #selector(sceneViewPannedOneFinger))
    sceneView.addGestureRecognizer(panRecognizer)

    // Handle two-finger pans
    let twoFingerPanRecognizer = UIPanGestureRecognizer(target: self, action: #selector(sceneViewPannedTwoFingers))
    sceneView.addGestureRecognizer(twoFingerPanRecognizer)


func sceneViewPannedTwoFingers(sender: UIPanGestureRecognizer) 
    print("two finger pan!!!")



func sceneViewPannedOneFinger(sender: UIPanGestureRecognizer) 
    print("one finger pan!!!")

【问题讨论】:

将 UIGestureRecognizerDelegate 添加到您的视图控制器并在您的视图控制器中将手势识别器委托设置为 self 并添加 shouldRecognizeSimultaneouslyWithGestureRecognizer 方法为它们返回 true 在将panRecognizer.delegate = self 添加到您的场景之前尝试一下 @LeoDabus 所以它可以工作,但现在它可以同时识别两者。你如何让它在用户使用一根手指时只调用一根手指选择器,而当用户用两根手指平移时调用两指选择器? 确保将最小触摸次数设置为两根手指的 2 次​​span> @LeoDabus 当然,太愚蠢了!啊。尽管最终对每个识别器都使用了 minimumNumberOfTouches 和 maximumNumberOfTouches。有什么问题吗?也请张贴作为答案! 【参考方案1】:

您需要将UIGestureRecognizerDelegate 添加到您的视图控制器中,并在您的视图控制器中将手势识别器委托设置为self。添加为它们返回 true 的 shouldRecognizeSimultaneouslyWithGestureRecognizer 方法。确保您也为它们设置了最小和最大触摸次数。

【讨论】:

【参考方案2】:

这样的代码

class MyClass : UIGestureRecognizerDelegate --< Delegate
 func gestureRecognizer(_: UIGestureRecognizer,
                           shouldRecognizeSimultaneouslyWithGestureRecognizer:UIGestureRecognizer) -> Bool
    
        return true

    

【讨论】:

你必须给你的班级委托才能使用这个委托方法 这有点用,但现在它可以同时识别两者。你如何让它在用户使用一根手指时只调用一根手指选择器,而当用户用两根手指平移时调用两指选择器? 当你需要它时.. 使用gesture.delegate = self 当你不需要它时不要使用gesture.delegate = self.

以上是关于iOS:实现单指平移和两指平移手势?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ios 模拟器上模仿两指滚动/拖动手势?

右侧使用 SWRevealViewController 的两个面板

将平移手势添加到 UICollectionView 单元 - IOS/Swift

iOS:啥速度阈值使平移手势成为轻弹?

如何实现像 iOS MAIL 应用程序这样的平移手势,以便一次只打开一个单元格?

捕获组合的按钮按下和平移手势