使用swift我能得到“你好,世界"延迟3秒,每2秒淡出一次。
让多个字符串(5-8)一次重复淡入淡出的最佳方法是什么?
谢谢!
答案 0 :(得分:1)
在接受答案的变体中,每当您发现自己嵌套动画时,通常可以使用关键帧动画:
func changeTextForLabel(label: UILabel, index: Int) {
UIView.transitionWithView(label, duration: 3.0, options: .TransitionCrossDissolve, animations:
{
self.label.text = self.messages[index]
}, completion: { [weak self] finished in
let nextIndex = index + 1
self?.changeTextForLabel(label, index: nextIndex < self?.messages.count ? nextIndex : 0)
})
}
或者,如果不是淡出,你宁愿在价值观之间有一个很好的交叉消解,你可以这样做:
*
答案 1 :(得分:0)
你需要一对嵌套的动画,一个用于处理淡入,另一个用于处理淡出。你可以在第一个完成块中调用第二个。
然后,您需要更改消息,然后为新消息设置动画,这只是再次调用动画对。这是一种方式:
class ViewController: UIViewController {
@IBOutlet weak var label: UILabel!
let theMessages=["Message 1","Message 2","The third message","The final message"]
var messageIndex=0;
override func viewDidLoad() {
super.viewDidLoad()
self.label.text=""
self.label.alpha=0;
self.animateMessage()
}
func animateMessage() {
self.label.text=self.theMessages[self.messageIndex];
if (++self.messageIndex == self.theMessages.count) {
self.messageIndex=0;
}
UIView.animateWithDuration(2.0, delay: 0.5, options: .CurveEaseInOut, animations: { () -> Void in
self.label.alpha=1.0
}, completion: { (success) -> Void in
UIView.animateWithDuration(2.0, delay: 0.5, options: .CurveEaseInOut, animations: { () -> Void in
self.label.alpha=0
}, completion: { (success) -> Void in
self.animateMessage()
})
})
}
}