IOS Swift SpriteKit SKLabel,文本的动画外观
IOS Swift SpriteKit SKLabel, animate appearance of text
我想为 Label 文本的外观设置动画,使其看起来像是正在输入。我想知道在 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
我想为 Label 文本的外观设置动画,使其看起来像是正在输入。我想知道在 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