Swift Continuous Rotation Animation not so continuous Swift Continuous Rotation Animation not so continuous xcode xcode

Swift Continuous Rotation Animation not so continuous


Try below extension for swift 4.

extension UIView {    func rotate360Degrees(duration: CFTimeInterval = 3) {        let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation")        rotateAnimation.fromValue = 0.0        rotateAnimation.toValue = CGFloat(Double.pi * 2)        rotateAnimation.isRemovedOnCompletion = false        rotateAnimation.duration = duration        rotateAnimation.repeatCount=Float.infinity        self.layer.add(rotateAnimation, forKey: nil)    }}

For start rotation.

MyView.rotate360Degrees()

And for Stop.

MyView.layer.removeAllAnimations()

You can use UIButton, UILabel and many more.


I'm not sure what's wrong with your code, but I've implemented continuous rotation using this method,

@IBAction func rotateView(sender: UIButton) {    UIView.animate(withDuration: 0.5, delay: 0, options: .curveLinear, animations: { () -> Void in        self.spinningView.transform = self.spinningView.transform.rotated(by: .pi / 2)    }) { (finished) -> Void in        self.rotateView(sender: sender)    }}


If you want to continuous rotate Button or View and stop that rotation whenever you want then you can try this:For start rotation:

@IBOutlet weak var RotateBtn: UIButton!var timeTimer: Timer?viewDidLoad(){  self.rotateView()  timeTimer = Timer.scheduledTimer(timeInterval: 0.5, target: self, selector: #selector(self.rotateView), userInfo: nil, repeats: true)}func rotateView(){    UIView.animate(withDuration: 0.5, delay: 0, options: .curveLinear, animations: { () -> Void in        self.RotateBtn.transform = self.RotateBtn.transform.rotated(by: CGFloat(M_PI_4))    })}

If you want to stop rotation then use:

@IBAction func StopBtn_Pressed(_ sender: AnyObject){   timeTimer?.invalidate()   self.RecordBtn.layer.removeAllAnimations()}