当尝试使用swift创建按钮时,SKSpriteNode触摸开始/结束不按预期工作

时间:2014-08-14 18:26:34

标签: button swift sprite-kit touchesbegan

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中选择另一个动画,如显示细节或模态,它可以工作。但我想要推动动画,而不是模态。

0 个答案:

没有答案