ios – 使用animateKeyframesWithDuration在屏幕上创建一个连续旋转的方块

前端之家收集整理的这篇文章主要介绍了ios – 使用animateKeyframesWithDuration在屏幕上创建一个连续旋转的方块前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我尝试使用下面的代码在屏幕上创建一个连续旋转的方块.但我不知道为什么转速在变化.如何更改代码以使旋转速度不变?我尝试了不同的UIViewKeyframeAnimationOptions,但似乎没有一个工作.
override func viewDidLoad() {
    super.viewDidLoad()

    let square = UIView()
    square.frame = CGRect(x: 55,y: 300,width: 40,height: 40)
    square.backgroundColor = UIColor.redColor()
    self.view.addSubview(square)

    let duration = 1.0
    let delay = 0.0
    let options = UIViewKeyframeAnimationOptions.Repeat
        UIView.animateKeyframesWithDuration(duration,delay: delay,options: options,animations: {
        let fullRotation = CGFloat(M_PI * 2)

        UIView.addKeyframeWithRelativeStartTime(0,relativeDuration: 1/3,animations: {
            square.transform = CGAffineTransformMakeRotation(1/3 * fullRotation)
        })                        
        UIView.addKeyframeWithRelativeStartTime(1/3,animations: {
            square.transform = CGAffineTransformMakeRotation(2/3 * fullRotation)
        })                        
        UIView.addKeyframeWithRelativeStartTime(2/3,animations: {
            square.transform = CGAffineTransformMakeRotation(3/3 * fullRotation)
        })
        },completion: {finished in
        })
    }

解决方法

这真的很奇怪… UIView.animateKeyframesWithDuration不能正常工作,因为我希望它与UIViewKeyframeAnimationOptions.CalculationModeLinear | UIViewKeyframeAnimationOpti ons.Repeat传入了选项.

如果使用非块方法创建关键帧动画(请参见下文),则旋转将按预期重复.

如果我发现为什么基于块的选项不起作用,我会尝试记住在这里更新答案!

override func viewDidLoad() {
    super.viewDidLoad()


    let square = UIView()
    square.frame = CGRect(x: 55,height: 40)
    square.backgroundColor = UIColor.redColor()
    self.view.addSubview(square)

    let fullRotation = CGFloat(M_PI * 2)

    let animation = CAKeyframeAnimation()
    animation.keyPath = "transform.rotation.z"
    animation.duration = 2
    animation.removedOnCompletion = false
    animation.fillMode = kCAFillModeForwards
    animation.repeatCount = Float.infinity
    animation.values = [fullRotation/4,fullRotation/2,fullRotation*3/4,fullRotation]

    square.layer.addAnimation(animation,forKey: "rotate")

}

猜你在找的iOS相关文章