OStack程序员社区-中国程序员成长平台

标题: ios - 圆形 UIView 缩放动画有时会回到正方形 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 16:59
标题: ios - 圆形 UIView 缩放动画有时会回到正方形

我使用自动布局在屏幕中央放置了一个 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-推荐答案


在启用 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/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4