Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 快速连续旋转动画不那么连续_Ios_Xcode_Swift_Animation - Fatal编程技术网

Ios 快速连续旋转动画不那么连续

Ios 快速连续旋转动画不那么连续,ios,xcode,swift,animation,Ios,Xcode,Swift,Animation,这是我的密码。目的是连续旋转名为漩涡[l]的UIImageView。但是,每个旋转开始/结束之间都有一个小的停顿。我已经看过了每一个动画教程,但不知道错误是什么 let fullRotation = CGFloat(M_PI * 2) let duration = 2.0 let delay = 0.0 let options = UIViewKeyframeAnimationOptions.Repeat | UIViewKeyframeAnimationOptions

这是我的密码。目的是连续旋转名为漩涡[l]的UIImageView。但是,每个旋转开始/结束之间都有一个小的停顿。我已经看过了每一个动画教程,但不知道错误是什么

let fullRotation = CGFloat(M_PI * 2)

    let duration = 2.0
    let delay = 0.0
    let options = UIViewKeyframeAnimationOptions.Repeat | UIViewKeyframeAnimationOptions.CalculationModeLinear

    UIView.animateKeyframesWithDuration(duration, delay: delay, options: options, animations: {
        UIView.addKeyframeWithRelativeStartTime(0, relativeDuration: 1/3, animations: {
            swirls[l].transform = CGAffineTransformMakeRotation(1/3 * fullRotation)
        })
        UIView.addKeyframeWithRelativeStartTime(1/3, relativeDuration: 1/3, animations: {
            swirls[l].transform = CGAffineTransformMakeRotation(2/3 * fullRotation)
        })
        UIView.addKeyframeWithRelativeStartTime(2/3, relativeDuration: 1/3, animations: {
            swirls[l].transform = CGAffineTransformMakeRotation(3/3 * fullRotation)
        })

        }, completion: {finished in 
    })

编辑:我看到有人建议以前的解决方案是可用的,但它根本不适用于连续不间断的旋转。唯一对我有效的技巧是我在下面选择的答案。谢谢

我不确定你的代码出了什么问题,但我已经用这种方法实现了连续旋转

@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)
    }
}

如果要连续旋转按钮或视图,并随时停止旋转,则可以尝试以下操作: 对于开始旋转:

@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))
    })
}
如果要停止旋转,请使用:

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

试试下面的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)
    }
}
用于开始旋转

MyView.rotate360Degrees()
停下来

MyView.layer.removeAllAnimations()

您可以使用
ui按钮
ui标签
以及更多功能。

我认为最好使用ui视图动画选项。重复,而不是在完成后再次开始动画handler@zellb,在这种情况下,这不起作用,因为每次打电话我只会走四分之一的路。此外,OP就是这样做的,它会导致下一个动画开始前的延迟。@rdelmar:我尝试过这个,但根本没有旋转。@TPos,我不知道为什么在没有看到您如何实现它的情况下会出现这种情况。它在我手里很管用。@rdelmar:事实上你的方法确实管用!!我刚开始打错了。可能是我喜欢的复制品!老实说,这应该是正确的答案。谢谢你的回答!工作得很有魅力……:)这个解决方案很好,让你的VC不那么混乱,我尝试了不同的解决方案,但这是最好的。