您的当前位置:首页正文

layer动画-基于CABasicAnimation的几个动画以

来源:华拓网

无限旋转动画

我创建了一个名为rotateImageView的视图,添加旋转代码如下

        let animation = CABasicAnimation(keyPath: "transform.rotation")
        animation.toValue = 2 * Double.pi
        animation.repeatCount = MAXFLOAT
        animation.duration = 0.3
        animation.isRemovedOnCompletion = false
        rotateImageView.layer.add(animation, forKey: nil)

效果:(gif不是很流畅)


无限平移

在实际使用中,我发现layer动画在切换界面后再回到有layer动画的界面,layer动画不会再动画了,上面的旋转动画也是一样,我暂时找到的解决方法是添加时加上动画的key,在添加前先移除原来的动画。
代码:


//我创建了一个centerImageView的视图并定义了一个cellAnimationKey
//每次视图出现时先移除动画再添加动画
centerImageView.layer.removeAnimation(forKey: cellAnimationKey)
centerImageView.layer.add(createAnimation(), forKey: cellAnimationKey)

fileprivate func createAnimation() -> CAAnimation {
        let animation = CABasicAnimation(keyPath: "transform.translation.x")
        animation.fromValue = 0
        animation.toValue = kScreenWidth
        animation.duration = 6
        animation.repeatCount = MAXFLOAT
        animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
        animation.fillMode = kCAFillModeForwards
        animation.isRemovedOnCompletion = false
        return animation
    }

效果:(gif是真的不流畅)