gpt4 book ai didi

ios - swift SKSpriteNode : Detect Tap/DoubleTap/LongPress

转载 作者:搜寻专家 更新时间:2023-10-30 23:03:18 24 4
gpt4 key购买 nike

我正在尝试创建 SKSpriteNode 的子类,它可以检测用户交互(点击、双击并按住),然后遵从委托(delegate)。在我看来,这是一个相对普遍的需求,但是:

  1. 代码无法在不触发单击的情况下检测双击。
  2. 我还没有找到检测按住/长按操作的方法。

我是不是做错了?我不禁觉得 SpriteKit 应该有一些标准来处理如此基本的事情。我知道有 UIGestureRecognizer,但它似乎与特定的 SKNodes 而不是 UIViews 不太兼容。

这是我目前拥有的。基于 Apple 的示例,我在主类文件中包含所有非设备特定代码:

import SpriteKit

enum ActionType: Int {
case Single
case Double
case Hold
}

protocol EnvironmentElementDelegate {
func handleActionOnElement(element: EnvironmentElement, actionType: ActionType)
}

class EnvironmentElement: SKSpriteNode {

let delegate: EnvironmentElementDelegate!

init(imageNamed: String, elementNamed: String, delegate: EnvironmentElementDelegate) {
self.delegate = delegate
let texture = SKTexture(imageNamed: imageNamed)
super.init(texture: texture, color: UIColor.clearColor(), size: texture.size())
self.name = elementNamed
userInteractionEnabled = true
}

required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}

...然后在一个单独的扩展文件中的所有特定于 iOS 的代码:

import SpriteKit

extension EnvironmentElement {

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
for touch: AnyObject in touches {
if (touch.tapCount >= 2) {
NSObject.cancelPreviousPerformRequestsWithTarget(self)
}
}
}

override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
for touch: AnyObject in touches {
if (touch.tapCount == 1) {
delegate.handleActionOnElement(self, actionType: ActionType.Single)
// Unable to find Swift equivalent to this: [self performSelector:@selector(onFlip) withObject:nil afterDelay:0.3];
} else {
delegate.handleActionOnElement(self, actionType: ActionType.Double)
}
}
}
}

最佳答案

您可以在 touchesBegan:

中简单地使用 touch.tapCount

关于ios - swift SKSpriteNode : Detect Tap/DoubleTap/LongPress,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26089619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com