区分基于第一或第二的触摸

时间:2015-05-10 23:09:33

标签: ios swift cocoa-touch sprite-kit multi-touch

我试图实施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是一个无序集合。

1 个答案:

答案 0 :(得分:1)

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

  1. 循环你的触摸,而不只是抓住第一个。
  2. 检查是否有firstTouch(用于跟踪第一次触摸的var)
  3. 如果没有firstTouch分配第一次触摸并执行您的位置逻辑
  4. 如果有第一次触摸检查,看每次触摸是否是firstTouch。如果不是,那就做你的轮换逻辑。
  5. 触摸结束并通过每次触摸取消循环。如果是firstTouch,则将var设置为nil。
  6. 很抱歉,我无法为您编写所有代码,但希望这能让您朝着正确的方向前进。