我想使用CABasicAnimation
扩展和收缩一个圈子。我之前设计了一种干净有效的方法来使用sin
和drawRect
类的UIView
方法绘制动画,但不幸的是,您似乎无法动画或强制{{1}无论你做什么,都用drawRect
方法开火。因此,我必须使用UIView.animate
提出解决方法。结果类型的作品,但动画是丑陋的,看起来不正确。以下是我的意思:
在膨胀和收缩期间发生翘曲,当圆形扩展时,右侧似乎有凹痕或空洞。这是负责动画制作的类:
CABasicAnimation
我已经尝试调整开始和结束角度,希望它是路径中没有重叠的一些工件,但它没有改变任何东西。我不确定如何解决这个问题,而且它是以Chadwick Wood的answer为基础的。
答案 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")
}
}
希望这有助于你