ios - 使用 Swift 的带有 SpriteKit 的 UISwipeGestureRecognizer

标签 ios swift sprite-kit ios8 uiswipegesturerecognizer

我正在用 swift 创建一个游戏,该游戏涉及用字母组成单词。这些字母是单独的 SKSpriteNode,位于一个 SKSpriteNode 的“架子”上。要从“架子”中删除字母,我正在尝试引入向上滑动。不幸的是,我在滑动被字母拾取时遇到了问题。架子似乎正在吸收它,有时甚至是 SKScene。我已禁用货架节点上的用户交互。

这是我的设置:

swipeRecognizer = UISwipeGestureRecognizer(target: self, action: Selector("move:"))
swipeRecognizer.direction = UISwipeGestureRecognizerDirection.Up
self.view.addGestureRecognizer(swipeRecognizer)

我将 swipeRecognizer 添加到 View 中,然后在 move 方法中,我有以下内容:

func move(swipe:UISwipeGestureRecognizer){        
    if(swipe.state == UIGestureRecognizerState.Ended && swipe.numberOfTouches() == 1){

        var touchLocation = swipe.locationInView(swipe.view)
        touchLocation = self.convertPointFromView(touchLocation)            
        var sprite = self.nodeAtPoint(touchLocation)

        if sprite is Letter{
            let letter = sprite as Letter
            if(gameManager.letterOnShelf(letter)){
                gameManager.letterFlicked(letter)
            }
        }
    }
}

只是有时它会将 Sprite 识别为字母,80% 的时间 Sprite 是架子,我无法弄清楚正确的工作方式是什么......

非常感谢任何帮助。

干杯!

最佳答案

我会推荐:

  1. 使用 UILongPressGestureRecognizer 并将 minimumPressDuration 设置为 0。
  2. 当手势处于 UIGestureRecognizerStateBegan 状态时,查看您触摸的 sprite 是否为 Letter 并保存对该图 block 的引用。
  3. UIGestureRecognizerStateEnded 状态下,您应该能够看到您的手势结束的位置(或者可能是轨迹等),然后移动您之前存储的引用的图 block 。

关于ios - 使用 Swift 的带有 SpriteKit 的 UISwipeGestureRecognizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25317259/

相关文章:

swift - 是否可以自定义 fabric Twitter 登录按钮的大小?

ios - Sprite Kit 场景编辑器 GameScene.sks 场景宽高

ios - 如何判断使用什么配置文件/签名证书来签署 .ipa?

ios - 从 AppDelegate 调用 ViewController 的成员函数

ios - 获取一个类的所有键

ios - 基于警报选择的 Swift TabbarViewController 操作。 shouldSelect 和 didSelect 没有帮助

ios - iOS enumerateChildNodeswithName访问所有物理实体

ios - Spritekit - 使用手势同时用多个手指绘制多条线

iOS Swift4 如何协调 T.Type 和类型(:) to pass dynamic class type as function parameter?

ios - iOS 系统字体的阿拉伯语基线未对齐