我有这个项目。
我的目标是使圆在动画的每个特定时刻都保持圆的形状,而不是使角半径大于当前圆的高度。
处理循环增长的代码如下:
func turnOn() {
let tempView = UIView(frame: CGRect(x: ballDiameter / 2, y: ballDiameter / 2, width: 0, height: 0))
tempView.backgroundColor = onColor
tempView.layer.cornerRadius = ballDiameter / 2
self.addSubview(tempView)
UIView.animate(withDuration: dotTravelTime, animations: { [weak self] in
//RIGHT HERE is the code for the circle to hold it's circular form
if self != nil {
tempView.frame = CGRect(x: 0, y: 0, width: self!.ballDiameter, height: self!.ballDiameter)
tempView.layer.cornerRadius = self!.ballDiameter / 2
}
self?.layoutIfNeeded()
}) { [weak self] _ in
self?.backgroundColor = self!.onColor
tempView.removeFromSuperview()
}
}
func turnOff() {
let tempView = UIView(frame: CGRect(x: 0, y: 0, width: ballDiameter, height: ballDiameter))
tempView.backgroundColor = onColor
self.addSubview(tempView)
self.backgroundColor = offColor
UIView.animate(withDuration: dotTravelTime, animations: { [weak self] in
//RIGHT HERE is the code for the circle to hold it's circular form
if self != nil {
tempView.frame = CGRect(x: self!.ballDiameter / 2, y: self!.ballDiameter / 2, width: 0, height: 0)
tempView.layer.cornerRadius = self!.ballDiameter / 2
}
self?.layoutIfNeeded()
}) { _ in
tempView.removeFromSuperview()
}
}
这里是我处理圆形动画的地方。我使用一个temp UIView来处理动画,然后在更改后面实际视图的颜色后删除该视图。tempView是一个圆形开关,您可以看到它随着滑动动画的变化而变化。如果你需要我的设计信息,请告诉我。我试了很多方法,结果都解决了,因为圆是正方形,或者角半径比我想要的稍大。(我认为它正在缩小拐角半径,比原来的尺寸小一些,但它很小。
最佳答案
我的目标是使圆扩大而减少保持圆的形状
那就不要用“愚蠢”的方式做一个圆(cornerRadius
)。遮罩到圆形路径并设置遮罩(和/或路径)的生长/收缩动画。
在本例中,我将黄色视图及其遮罩一起增长。动画是故意慢(2秒的持续时间)向您显示,这是顺利的工作。黄色视图在左上角包含一个标签,在右下角包含一个标签,这样您就可以看到(1)它是一个视图,(2)它连贯地增长。
关于swift - 如何使UIView在UIView.animate()中以正确的拐角半径增长?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41523638/