Ios 顺时针图像旋转动画

Ios 顺时针图像旋转动画,ios,swift,uiviewanimation,cgaffinetransform,Ios,Swift,Uiviewanimation,Cgaffinetransform,我有一个动画,它应该不断旋转图像。但它有两个问题。速度是非常奇怪的,尽管我设置它不断重复,你可以看到它如何开始,停止,然后重复。这是不应该发生的。它应该不间断地旋转。 另外,另一个问题是当动画停止时,图像由于某种原因向左移动 这是我的密码: func animateLogo() { UIView.animate(withDuration: 6.0, delay: 0.0, options: .repeat, animations: { self.logo.transfor

我有一个动画,它应该不断旋转图像。但它有两个问题。速度是非常奇怪的,尽管我设置它不断重复,你可以看到它如何开始,停止,然后重复。这是不应该发生的。它应该不间断地旋转。 另外,另一个问题是当动画停止时,图像由于某种原因向左移动

这是我的密码:

func animateLogo()
{
    UIView.animate(withDuration: 6.0, delay: 0.0, options: .repeat, animations: {
        self.logo.transform = CGAffineTransform(rotationAngle: ((180.0 * CGFloat(Double.pi)) / 180.0))
    }, completion: nil)
}
试试这个

func rotateView(targetView: UIView, duration: Double = 1.0) {
    UIView.animate(withDuration: duration, delay: 0.0, options: .curveLinear, animations: {
        targetView.transform = targetView.transform.rotated(by: CGFloat(M_PI))
    }) { finished in
        self.rotateView(targetView: YOUR_LOGO, duration: duration)
    }
}
如何使用

self.rotateView(targetView: YOUR_LOGO, duration: duration)

在iOS中,坐标系是翻转的。所以,当你的学位提高时,你是顺时针走的。这意味着通过270°将得到一个角度,相当于标准坐标系中的90°。记住这一点,并相应地提供所需的角度

考虑以下方法

1) 方便的角度延伸

postfix operator °

protocol IntegerInitializable: ExpressibleByIntegerLiteral {
    init (_: Int)
}

extension Int: IntegerInitializable {
    postfix public static func °(lhs: Int) -> CGFloat {
        return CGFloat(lhs) * .pi / 180
    }
}

extension CGFloat: IntegerInitializable {
    postfix public static func °(lhs: CGFloat) -> CGFloat {
        return lhs * .pi / 180
    }
}
2) 使用CABASICANIATION旋转到任意角度:

extension UIView {
    func rotateWithAnimation(angle: CGFloat, duration: CGFloat? = nil) {
        let pathAnimation = CABasicAnimation(keyPath: "transform.rotation")
        pathAnimation.duration = CFTimeInterval(duration ?? 2.0)
        pathAnimation.fromValue = 0
        pathAnimation.toValue = angle
        pathAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
        self.transform = transform.rotated(by: angle)
        self.layer.add(pathAnimation, forKey: "transform.rotation")
    }
}
用法:

override func viewDidAppear(_ animated: Bool) {
    // clockwise
    myView.rotateWithAnimation(angle: 90°)

    // counter-clockwise
    myView.rotateWithAnimation(angle: -270°) 

}

通过负值将逆时针旋转。

角度应为弧度,而不是度。以弧度表示的角度=度*pi/180。所以,如果你想旋转360度,你应该输入弧度=360*pi/180=2*pi=2*3.1415=6.283。

尝试将锚点设置为0.5,并使用动画,比如
self.logo.transform=CGAffineTransform(rotationAngle:(CGFloat(Double.pi))
from Perfect!这就是我想要的!我必须再等一分钟,你知道的规则:)但我会的。谢谢你的帮助!