In meiner App möchte ich ein Array von Strings animieren, um den Benutzern Anweisungen zu geben. Meine Erwartung ist, dass die erste Saite eingeblendet wird, für Sekunden gehalten wird und dann ausblendet, dann wird die erste Saite aus dem Array entfernt und die nächste Saite usw., bis das Array leer ist. Es ist etwas falsch mit meiner Implementierung ist jedoch, es zu debuggen schwer ist (es scheint, würde das Programm nicht Zeile für Zeile durchgeführt werden), hier ist mein Code:swift: rekursive Animation
var text = [Text.text1, Text.text2]
@IBOutlet weak var paragraph: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
paragraph.alpha = 0
showText(text: text)
}
private func showText(text: [String]) {
if text.first == nil {
return
} else {
paragraph.text = text.first
UIView.animate(withDuration: 1.5, delay: 1.5, options: .curveEaseInOut, animations: {
self.paragraph.alpha = 1
}, completion: { (_) in
UIView.animate(withDuration: 1.5, delay: 0.5, options: .curveEaseInOut, animations: {
self.paragraph.alpha = 0
}, completion: { (_) in
self.text.remove(at: 0)
self.showText(text: text)
})
})
}
}
Das Problem ist die erste Saite zeigt dreimal und ich dann einen Index außerhalb des Bereichsfehlers erhalten. Wenn ich versuche, Breakpoints zu setzen und auf "Weiter" zu klicken, werden die Animations- und Completion-Blöcke übersprungen, und ich weiß nicht, wie man eine Funktion mit einem Block als Parameter debuggt. Und auch obwohl ich
paragraph.text = text.first
nach der ersten Runde habe, hat paragraph.text
die zweite Saite gewesen, aber nach wie vor die erste Saite zeigt. Und es scheint, dass meine Abbruchbedingung nicht funktioniert: Nach zwei Iterationen ich die Zählung des self.text
Array bemerkt habe, hat 0 geworden, aber die Funktion nicht zurückkehrte, geht es um anderes ...
if text.count == 0 {
return
} else { ... }
Ich bin ein Neuling und weiß nicht, wie man Blöcke debuggt ...
Haben Sie versucht, dies mit Breakpoints debuggen? –
Was genau stimmt nicht? – rmaddy
@ZonilyJame Ich habe versucht mit Breakpoints, aber ich weiß nicht, wie man mit Blöcken als Parameter einer Funktion umgehen ... –