Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IOS Swift SpriteKit SKLabel,为文本外观设置动画_Ios_Swift_Sklabelnode - Fatal编程技术网

IOS Swift SpriteKit SKLabel,为文本外观设置动画

IOS Swift SpriteKit SKLabel,为文本外观设置动画,ios,swift,sklabelnode,Ios,Swift,Sklabelnode,我想对标签文本的外观设置动画,使其看起来像是正在键入的文本。我想知道在SWIFT中是否有一种相对简单的方法可以做到这一点。谢谢。试试这个: class GameScene : SKScene { let text = ["G", "a", "m", "e"] var labelText = "" let labelNode = SKLabelNode() var calls : Int = 0 var timer : NSTimer!

我想对标签文本的外观设置动画,使其看起来像是正在键入的文本。我想知道在SWIFT中是否有一种相对简单的方法可以做到这一点。谢谢。

试试这个:

class GameScene : SKScene {

    let text = ["G", "a", "m", "e"]

    var labelText = ""

    let labelNode = SKLabelNode()

    var calls : Int = 0

    var timer : NSTimer!

    override func didMoveToView(view: SKView) {

        timer = NSTimer.scheduledTimerWithTimeInterval(YOUR_DESIRED_INTERVAL, target: self, selector: #selector(self.updateLabelText), userInfo: nil, repeats: true)

        labelNode.text = labelText
        self.addChild(labelNode)
    }


    func updateLabelText() {

        labelText += text[calls]
        labelNode.text = labelText
        calls += 1

        if calls == text.count + 1 {
            timer.invalidate()
    }
}

我建议您使用SKAction.wait(forDuration:)而不是计时器

extension SKLabelNode{
    func startTyping(_ duration:TimeInterval, completion:(()->Void)?){
        guard let text = self.text else{return}

        self.text = ""
        var index = 0
        var block:(() -> Void)!
        block = {
            index += 1
            if index > text.count{
                completion?()
                return
            }else{
                let action = SKAction.sequence([SKAction.wait(forDuration: duration), SKAction.run{self.text = String(text.prefix(index))}])
                self.run(action, completion: block)
            }
        }
        block()
    }
}
如果要获得打字机外观,请提前设置水平对齐

label.horizontalAlignmentMode = .left

看一看,在Spritek中使用计时器不是一个好主意,因为这些计时方法忽略了节点、场景或视图的暂停状态。“Burro”的第二个答案更好,以防几年后有人像我一样偶然发现:D