Ios 如何从外部访问for循环并使其在swift中停止
我正在使用此函数使文本逐字书写:Ios 如何从外部访问for循环并使其在swift中停止,ios,swift,Ios,Swift,我正在使用此函数使文本逐字书写: extension SKLabelNode { func setTextWithTypeAnimation(typedText: String, characterInterval: NSTimeInterval = 0.05) { text = "" self.fontName = "PressStart2P" dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERA
extension SKLabelNode {
func setTextWithTypeAnimation(typedText: String, characterInterval: NSTimeInterval = 0.05) {
text = ""
self.fontName = "PressStart2P"
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0)) {
for character in typedText.characters {
dispatch_async(dispatch_get_main_queue()) {
self.text = self.text! + String(character)
}
NSThread.sleepForTimeInterval(characterInterval)
}
}
}
而且,如果用户单击屏幕,我希望使for循环停止并立即显示完整的文本。我会这样做:
var ignoreSleeper = false
@IBAction func pressButton(sender: UIButton) {
ignoreSleeper = true
}
extension SKLabelNode {
func setTextWithTypeAnimation(typedText: String, characterInterval: NSTimeInterval = 0.05) {
text = ""
self.fontName = "PressStart2P"
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0)) {
for character in typedText.characters {
dispatch_async(dispatch_get_main_queue()) {
self.text = self.text! + String(character)
}
if(!ignoreSleeper){
NSThread.sleepForTimeInterval(characterInterval)
}
}
}
}
编辑:就像@Breek已经提到的那样我建议实现一个微型的
NSTimer
,带有一个计数器,用于显示字符数。用重复计数typedText.characters.count
和所需的延迟启动计时器,就可以开始了(使用一个线程)。增加每个计时器循环上的字符数计数器。您可以随时通过在计时器上调用invalidate
按钮来停止此计时器
示例
var timer: NSTimer?
var numberOfCharsToPrint = 1
let text = "Hello, this is a test."
func updateLabel() {
if numberOfCharsToPrint == text.characters.count {
welcomeLabel.text = text
timer?.invalidate()
}
let index = text.startIndex.advancedBy(numberOfCharsToPrint)
welcomeLabel.text = text.substringToIndex(index)
numberOfCharsToPrint++;
}
然后在希望动画开始时初始化计时器
timer = NSTimer.scheduledTimerWithTimeInterval(0.25, target: self, selector: "updateLabel", userInfo: nil, repeats: true)
您可以在任何给定时间使用
timer?.invalidate()
当用户触摸屏幕并在循环中放入checking if语句时,设置为某个值的布尔标志如何?此代码启动一个新线程,该线程启动count(typedText)
线程。我称这种方法为“通过胸部进入眼睛”。我想实现一个小型的计时器
,带有一个计数器,用于显示字符数。启动计时器
,重复计数计数(typedText)
和所需的延迟,就可以开始了(使用一个线程)。您可以随时按下按钮停止此计时器。写这篇文章我意识到这应该是一个答案而不是评论…是的,也许这会是更好的解决方案是的,当然。我的Mac电脑在工作。在家里我有一台电脑,所以你得等几个小时。