除非设置断点,否则ios touchesBegan doen工作

时间:2015-01-14 18:57:55

标签: ios swift

我尝试在本教程中实现CGButtonhttp://ganbarugames.com/2014/09/buttons-sprite-kit-using-swift/

我在一个简单的测试项目中试过这个,它运行得很好。 然后我把它放在我的工作项目中,发生了奇怪的事情。

当我点击按钮时,touchesBegan()未被调用(我通过在其中添加println来检查此项)。因此,不会触发该操作。但是,如果我在touchesBegan()内的任何一行放置一个断点,那么这个断点就会被击中,touchesBegan()可以在我继续之后工作。 (例如println()此时打印出来)

我认为断点不会影响程序的流程。是什么导致这种情况,我该如何解决?

添加: 我在touchesBegantouchesEnded时在按钮上添加了一些动画(开始时缩放到1.1并在结束时缩放到原始大小)。事实证明,当我点击按钮时,会触发touchesBegan动画(缩放到1.1),但它只是停在那里,println没有被击中。

2 个答案:

答案 0 :(得分:1)

如果你想构建一个按钮或开关用于通用,你应该尝试我做的这个控件,使用它很直接: 您只需初始化所需的按钮/开关类型(ColoredSprite,Textured或TextOnly)

let control = TWButton(normalColor: SKColor.blueColor(), highlightedColor: SKColor.redColor(), size: CGSize(width: 160, height: 80))

初始化后,为它添加一个闭包(就像UIButton上的addTargetForSelector)

 control.addClosureFor(.TouchUpInside, target: self, closure: { (scene, sender) -> () in
            scene.testProperty = "Changed Property"
        })
    }

就是这样!有关GitHub页面上自述文件部分的更多信息:https://github.com/txaidw/TWControls

但是,如果您想在特定节点中实现,我就是这样做的:

internal override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    let touch = touches.first as! UITouch
    let touchPoint = touch.locationInNode(self.parent)

    if self.containsPoint(touchPoint) {
        self.touchLocationLast = touchPoint
        touchDown()
    }
}

internal override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
    let touch = touches.first as! UITouch
    let touchPoint = touch.locationInNode(self.parent)
    self.touchLocationLast = touchPoint
}


internal override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
    let touch = touches.first as! UITouch
    let touchPoint = touch.locationInNode(self.parent)

        if let lastPoint = self.touchLocationLast where self.containsPoint(lastPoint) {
            // Ended inside
            touchUpInside()
        }
        else {
            // Ended outside
            touchUpOutside()
        }
}

答案 1 :(得分:0)

谢谢你们帮助我。我的同事刚刚帮助我。 因此导致此问题的原因是,我的视图控制器中有一个水龙头和平移手势识别器,它们与我的touchesBegantouchesEnded冲突。

因此,当我点击时,首先触发touchesBegan。但是它会点击识别器而不是我的touchesEnded。同样的事情,当我拖动时,它会转到平移识别器而不是touchesMoved