使用CABasicAnimation适当地设置圆半径的动画

时间:2017-08-09 21:43:33

标签: ios animation swift3 cabasicanimation

我想使用CABasicAnimation扩展和收缩一个圈子。我之前设计了一种干净有效的方法来使用sindrawRect类的UIView方法绘制动画,但不幸的是,您似乎无法动画或强制{{1}无论你做什么,都用drawRect方法开火。因此,我必须使用UIView.animate提出解决方法。结果类型的作品,但动画是丑陋的,看起来不正确。以下是我的意思:

enter image description here

在膨胀和收缩期间发生翘曲,当圆形扩展时,右侧似乎有凹痕或空洞。这是负责动画制作的类:

CABasicAnimation

我已经尝试调整开始和结束角度,希望它是路径中没有重叠的一些工件,但它没有改变任何东西。我不确定如何解决这个问题,而且它是以Chadwick Wood的answer为基础的。

1 个答案:

答案 0 :(得分:2)

使用此UIView子类

class RadioAnimationView: UIView {

    var animatableLayer : CAShapeLayer?

    override func awakeFromNib() {
        super.awakeFromNib()
        self.layer.cornerRadius = self.bounds.height/2

        self.animatableLayer = CAShapeLayer()
        self.animatableLayer?.fillColor = self.backgroundColor?.cgColor
        self.animatableLayer?.path = UIBezierPath(roundedRect: self.bounds, cornerRadius: self.layer.cornerRadius).cgPath
        self.animatableLayer?.frame = self.bounds
        self.animatableLayer?.cornerRadius = self.bounds.height/2
        self.animatableLayer?.masksToBounds = true
        self.layer.addSublayer(self.animatableLayer!)
        self.startAnimation()
    }


    func startAnimation()
    {
        let layerAnimation = CABasicAnimation(keyPath: "transform.scale")
        layerAnimation.fromValue = 1
        layerAnimation.toValue = 3
        layerAnimation.isAdditive = false
        layerAnimation.duration = CFTimeInterval(2)
        layerAnimation.fillMode = kCAFillModeForwards
        layerAnimation.isRemovedOnCompletion = true
        layerAnimation.repeatCount = .infinity
        layerAnimation.autoreverses = true

        self.animatableLayer?.add(layerAnimation, forKey: "growingAnimation")
    }

}

希望这有助于你