根据第一次或第二次来区分触摸

Differentiating touches based on first or second

我正在尝试实现 2 种不同的基于触摸的行为。第一个行为的逻辑是这样的:

override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
    let touch = touches.first as! UITouch
    let touchLocation = touch.locationInNode(self)
    moveViewTo(touchLocation) //moves my view to touchLocation
}

现在,对于我的第二个行为,我想根据手指在屏幕上的位置旋转视图。为此,我尝试了这个:

override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
    let touch = touches.first as! UITouch
    let touchLocation = touch.locationInNode(self)
    rotateViewTo(touchLocation) //rotates my view to face touchLocation
}

现在,我希望这两种截然不同的行为同时起作用。特别是,我希望第一次触摸改变视图的位置,第二次触摸旋转视图。

只有在视图中有两次触摸时才可以旋转,并根据第二次触摸改变方向。

有什么方法可以区分哪些是第一次触摸,哪些是第二次触摸?我找不到区分 touches: Set<NSObject> 的方法,因为 Set 本质上是一个无序集合。

我相信您唯一的选择是将您的第一次触摸存储为 var。我的 swift 不够强大,无法为您编写代码,但这里是步骤。

  1. 循环你的触摸,而不是只抓住第一个。
  2. 检查是否有 firstTouch(用于跟踪首次触摸的变量)
  3. 如果没有 firstTouch 分配第一次触摸并执行您的位置逻辑
  4. 如果有第一次触摸检查是否每次触摸都是第一次触摸。如果不是,则执行轮换逻辑。
  5. On touches ended and canceled 循环遍历每个触摸。如果它是 firstTouch,请将您的 var 设置为 nil。

抱歉,我无法为您写出所有代码,但希望这能让您朝着正确的方向前进。