我使用Autolayout在屏幕中央放置了一个UIView。这款UIView的正方形尺寸为屏幕宽度的15%。然后在我的控制器上添加cornerRadius:
override func viewDidLayoutSubviews() {
circle.layer.cornerRadius = circle.frame.size.width / 2.0
}
然后,当用户点击按钮时,圆形视图将缩小并显示第一个动画。
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变成了正方形。但有时我的动画效果很好,圆形缩小动画也没问题。
此外,放大动画似乎一直都很好。
我不明白为什么缩小动画不能一直工作。
有什么想法吗?
由于
答案 0 :(得分:0)
在启用自动布局的动画时,通常最好在开始动画之前在视图中调用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
}
}
答案 1 :(得分:0)
在此方法中尝试使用边界而不是框架:
override func viewDidLayoutSubviews() {
circle.layer.cornerRadius = circle.frame.size.width / 2.0
}
对我有用=)