【发布时间】:2017-03-05 15:19:02
【问题描述】:
我正在尝试让明星在循环中“呼吸”的图像。变大变小,然后不断重复。我希望这在我的应用程序仍在运行且响应迅速时继续。当我在我的应用程序中转到另一个视图时,我希望动画停止。
这是我得到的
override func viewDidLoad() {
super.viewDidLoad()
DispatchQueue.main.async {
self.animateStars()
}
}
func animateStars() {
UIView.animate(withDuration: 4, animations : {
self.star.transform = CGAffineTransform(scaleX: 2.5, y: 2.5)
}) { finished in
NSLog("Star is big. Finished = \(finished)")
}
UIView.animate(withDuration: 4, animations : {
self.star.transform = CGAffineTransform(scaleX: 0.5, y: 0.5)
}) { finished in
NSLog("Star is small. Finished = \(finished)")
}
}
这并不难循环。而且我不知道如何让它循环而不让它在后台像疯了一样运行,当用户点击带有 segue 的按钮时,转到另一个视图。
我在 Objective C 中找到了一种解决方案,但我似乎不明白我应该如何将它翻译成 Swift 3.0。此处示例:https://stackoverflow.com/a/31978173/5385322
[UIView animateWithDuration:1
delay:0
options:UIViewKeyframeAnimationOptionAutoreverse | UIViewKeyframeAnimationOptionRepeat
animations:^{
yourView.transform = CGAffineTransformMakeScale(1.5, 1.5);
}
completion:nil];
感谢您的宝贵时间和建议! //西蒙
【问题讨论】:
-
UIView.animate(withDuration: 1, delay: 0, options: [.autoreverse, .repeat], animations: { self.star.transform = CGAffineTransform(scaleX: 2.5, y: 2.5) }) -
这绝对很棒!一个棘手的问题,我不确定是否与此有关。但是当我转到另一个视图,然后按返回返回到第一个视图(带有动画)时,动画被冻结并且不起作用。知道如何解决这个问题,以便每次我进入这个主视图时动画都会运行吗?
-
为什么我得到-1? :)
-
我不知道你为什么得到 -1。不是我。在您的 viewWillDisappear 中,您应该调用 removeAllAnimations 并将转换设置回身份。然后在您的 viewWillAppear 中,您应该重新调用动画。
标签: ios swift xcode uiviewanimation dispatch-async