我使用自动布局在屏幕中央放置了一个 UIView。这个 UIView 是一个正方形,大小为屏幕宽度的 15%。然后在我的 Controller 上添加cornerRadius:
override func viewDidLayoutSubviews() {
circle.layer.cornerRadius = circle.frame.size.width / 2.0
}
然后,当用户单击按钮时,圆形 View 会随着第一个动画缩小。
UIView.animateWithDuration(0.4, delay: 0.1, options: .CurveEaseIn, animations: { () -> Void in
self.circle.alpha = 0.0
self.circle.transform = CGAffineTransformMakeScale(0.01, 0.01)
}) { (finished) -> Void in
scaleUp()
}
private func scaleUp() {
UIView.animateWithDuration(0.5, delay: 0.0, options: .CurveEaseInOut, animations: { () -> Void in
self.circle.alpha = 1.0
self.circle.transform = CGAffineTransformIdentity
}) { (finished) -> Void in
}
}
有时缩小动画无法正常工作。在开始之前,cornerRadius 被删除,我的 UIView 变成了一个正方形。但有时我的动画效果很好,圆圈缩小动画也可以。
此外,放大动画似乎一直运行良好。
我不明白为什么缩小动画一直不起作用。
有什么想法吗?
谢谢
Best Answer-推荐答案 strong>
在启用 Auto Layout 的情况下进行动画制作时,通常最好在开始动画之前在 View 上调用 layoutIfNeeded ,然后在循环中再次调用。
override func viewDidLayoutSubviews() {
circle.layer.cornerRadius = circle.frame.size.width / 2.0
}
@IBAction func scaleDownUp(sender: AnyObject) {
self.circle.layoutIfNeeded()
UIView.animateWithDuration(0.4, delay: 0.1, options: .CurveEaseIn, animations: { () -> Void in
self.circle.alpha = 0.0
self.circle.transform = CGAffineTransformMakeScale(0.01, 0.01)
self.circle.layoutIfNeeded()
}) { (finished) -> Void in
self.scaleUp()
}
}
private func scaleUp() {
self.circle.layoutIfNeeded()
UIView.animateWithDuration(0.5, delay: 0.0, options: .CurveEaseInOut, animations: {
self.circle.alpha = 1.0
self.circle.transform = CGAffineTransformIdentity
self.circle.layoutIfNeeded()
}) { (finished) -> Void in
}
}
关于ios - 圆形 UIView 缩放动画有时会回到正方形,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/38419133/
|