为什么UIView没有旋转(iOS)

  • 本文关键字:旋转 iOS UIView ios swift
  • 更新时间 :
  • 英文 :


我创建了一个小的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))

验证旋转是否发生

最新更新