ive子类SKSpriteNode,我试图通过覆盖SKSpriteNode的touchesBegan和touchesEnded方法来实现一个简单的按钮,并添加了几个方法来按下/释放按钮动画。
import Foundation
import SpriteKit
class SimpleButton: SKSpriteNode {
//called when the user taps the button
override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!) {
println("touches began")
animateForTouchDown()
}
//called when the user finishes touching the button
override func touchesEnded(touches: NSSet!, withEvent event: UIEvent!) {
println("touches ended")
animateForTouchUp()
}
override func touchesMoved(touches: NSSet!, withEvent event: UIEvent!) {
println("touches moved")
}
func animateForTouchDown() {
self.runAction(SKAction.scaleBy(0.8, duration: 0.1))
println("animateing for touch down")
}
func animateForTouchUp() {
self.runAction(SKAction.scaleBy(1.25, duration: 0.1))
println("animating for touch up")
}
}
并将按钮添加到我的场景中,如下所示:
let imageTexture = SKTexture(imageNamed: "a_button")
let sprite: SimpleButton = SimpleButton(texture: imageTexture)
sprite.userInteractionEnabled = true
sprite.position = CGPoint(x:CGRectGetMidX(self.frame) - 200, y:CGRectGetMidY(self.frame));
sprite.color = UIColor.blackColor()
sprite.colorBlendFactor = 1.0
self.addChild(sprite)
这只有在按钮的x位置位于屏幕右侧时才有效。如果我将按钮移动到屏幕的左侧(x <200左右),则使按钮动画化的唯一方法是单击并拖动然后释放。 (看起来触摸开始和结束都会在发生这种情况时释放按钮,这很奇怪)
我不知道为什么会这样。对我来说根本没有意义。我已经使用相同的精确代码为我的场景添加了多个按钮,屏幕右侧的按钮效果很好,屏幕左侧的任何内容都超过x = 200左右,你必须单击并拖动才能使它们正常工作。有任何想法吗?我已经尝试了多个模拟器,多个iOS版本,在运行7.1的设备上进行了测试,它们都具有相同的行为。
更新:看起来这种情况正在发生,因为我在一个视图控制器中加载了我的场景,这个控制器被推送到导航控制器堆栈,并带有默认的show(push)动画。有什么想法我可以用动画制作这个吗?如果我在我的segue中选择另一个动画,如显示细节或模态,它可以工作。但我想要推动动画,而不是模态。