我创建了一个小的UIView,并使用animate方法让它永远旋转:
let v2=UIView(frame: CGRect(x: 100, y: 100, width: 30, height: 30))
v2.backgroundColor=UIColor.orange
v2.transform=CGAffineTransform(rotationAngle: 0)
view.addSubview(v2)
UIView.animate(withDuration: 2, delay: 0, options: [.repeat,.curveLinear], animations: {
v2.transform=CGAffineTransform.init(rotationAngle: -CGFloat(Double.pi*2))
}, completion:nil)
但我发现UIView根本不旋转,为什么?
你实际上是在说"旋转到其当前旋转"——所以什么也没发生。
试试这个-旋转到180度(.pi
(。。。然后,重复将再旋转180度,再旋转一个,再旋转另一个,等等:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let v2=UIView(frame: CGRect(x: 100, y: 100, width: 30, height: 30))
v2.backgroundColor=UIColor.orange
view.addSubview(v2)
UIView.animate(withDuration: 2, delay: 0, options: [.repeat,.curveLinear], animations: {
v2.transform = CGAffineTransform(rotationAngle: .pi)
}, completion:nil)
}
编辑-更多说明。。。
如果你想要一个连续的旋转,你可以使用上面的代码。不过,请注意,如果您想要逆时针旋转,则需要使用小于180度的负旋转角度。
例如:
UIView.animate(withDuration: 2, delay: 0, options: [.repeat,.curveLinear], animations: {
v2.transform = CGAffineTransform(rotationAngle: -.pi * 0.5)
}, completion:nil)
这将使其逆时针旋转90度,然后一次又一次,等等。
另一方面,如果你只想让它旋转一次(到任意角度,顺时针或逆时针(,你会想要使用Core Animation
,正如@matt:在这篇优秀的文章中所解释的那样
在iOS 中控制旋转动画
旋转但全周期360度
v2.transform=CGAffineTransform.init(rotationAngle: -CGFloat(Double.pi*2))
将其更改为此
v2.transform=CGAffineTransform.init(rotationAngle: -CGFloat(Double.pi*2/3))
验证旋转是否发生