iOS:如何实现单指和双指平移手势?

5
目标是针对同一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!!!")
}

在将 panRecognizer 添加到场景之前,请尝试 panRecognizer.delegate = self - Leo Dabus
@LeoDabus,您的意思是shouldRecognizeSimultaneouslyWithGestureRecognizer是解决方案吗?然后文档有点让人困惑,因为一些帖子将该函数解释为同时进行两个手势。另外,请发布完整答案以便获得积分(尽管这并不是您需要的声誉值:))。 - Crashalot
1
@LeoDabus,现在它可以工作了,但是它同时识别两个选择器。你怎么让它只在用户使用一个手指时调用单指选择器,在用户用两个手指平移时调用双指选择器呢? - Crashalot
1
确保将最小触摸次数设置为2,以实现双指操作。 - Leo Dabus
1
@LeoDabus 当然,太蠢了!唉。虽然最终使用了每个识别器的minimumNumberOfTouches和maximumNumberOfTouches。这样做有什么问题吗?另外请发布为答案! - Crashalot
显示剩余11条评论
2个回答

3

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


1
像这样的代码。
class MyClass : UIGestureRecognizerDelegate --< Delegate
 func gestureRecognizer(_: UIGestureRecognizer,
                           shouldRecognizeSimultaneouslyWithGestureRecognizer:UIGestureRecognizer) -> Bool
    {
        return true

    }

你需要为你的类提供委托以使用这个委托方法。 - JAck
这个有点可行,但现在它同时识别两个。如何让它只在用户使用一个手指时调用单指选择器,在用户用两个手指平移时调用双指选择器? - Crashalot
当你需要它时,使用 gesture.delegate = self;当你不需要它时,不要使用 gesture.delegate = self。 - JAck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接