SKLabelNode在iOS 7.1上的文字消失问题

3
我写了一个名为updateLabel的函数来随时间计算我收集的硬币。我使用NSTimer调用该函数以获得计数效果。
在iOS 8中,一切都运行良好,但是当我在iOS 7.1中调用该函数时,我的标签就变成空白...如果我打印Label.text,我会得到正确的数字,但它只是不显示。甚至声音“coinSound”也可以正常播放。
scoreLabel = SKLabelNode()
scoreLabel.text = "0"
self.addChild(scoreLabel)           // shows up and works with "0"

self.timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self.self, selector: "updateLabel", userInfo: nil, repeats: true)



func updateLabel() {

    var score:Int = coinsCollected
    var current:Int = self.scoreLabel.text.toInt()!

    if (current < score) {

        current += 1
        scoreLabel.text = String(current)
        println("current: \(current) , labelText: \(scoreLabel.text)")    
        self.runAction(coinSound)                                         
    } else {
        timer.invalidate()
    }

}

感谢您的帮助。

3
不要使用NSTimer!虽然可能不是你问题的根源,但还是建议修复。 - CodeSmile
感谢提供的信息。我曾考虑过并最近尝试过,但没有解决我的问题,只能恢复我的旧 NSTimer 版本。我会确保再次切换到 Actions。然而,具体有什么好处呢?更快吗?更有效率吗? - MikeB
2
请参考上面的链接进行解释。 - CodeSmile
改回Action。仍然适用于iOS 8,但不适用于7.1。问题仍然存在。 - MikeB
@MikeyB 试着设置 zPosition。 - Valent Richie
显示剩余4条评论
1个回答

0

如果是前一种情况,那么可能是标签根本没有显示出来,而不仅仅是它没有更新文本。例如,当您不希望它出现时,它可能在某些其他元素的后面,它可能被渲染到您不希望的位置,它可能以零透明度或与背景颜色相匹配的颜色(例如白色背景上的白色)进行渲染,或者它可能无法找到创建字形所需的信息(即,您可能正在使用该系统上不可用的字体)。

如果是后一种情况,可能是您计算文本的方式有问题。我注意到您正在做一些奇怪的事情-通过获取当前文本的Int值,加上一,然后将文本设置回去来获取“当前”值。这种方法的问题在于,如果您在该字段中有任何非整数值的文本,则永远会破坏该字段。更好的方法是保持一个Int变量,将其递增,然后将字段的文本设置为该变量。

你可以通过将该字段的文本设置为简单的“1”或其他内容来在这些情况之间进行测试,以查看是否显示。如果您可以显示静态文本成员,则可以转移到动态显示。但是,如果静态文本未显示,则表示基于计时器的动态代码与问题无关。

要检查的一件事是您是否使用有效的字体名称。例如,“Arial”不是字体名称-您必须使用“ArialMT”。确保您使用实际的字体名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接