ios中的组动画

Posted

技术标签:

【中文标题】ios中的组动画【英文标题】:Group Animation in ios 【发布时间】:2021-05-23 19:53:28 【问题描述】:

我正在制作一个内部有圆形图层的自定义加载器,它将以两种方式进行动画处理。第一个形状将像缩放一样动画脉冲,它的半径随着无限时间增加和减少,同时它将在视图内围绕视图中心旋转。但是现在我的组动画不能正常工作,视图没有旋转全半径并且缩放不起作用 这是我的代码审查,并告诉我哪里出错了。

class ViewController: UIViewController 
    @IBOutlet weak var loaderView: UIView!
    
    override func viewDidLoad() 
        super.viewDidLoad()
        //circularLoader()
    
    
    override func viewWillAppear(_ animated: Bool) 
        super.viewWillAppear(animated)
    
    
    override func viewWillLayoutSubviews() 
        super.viewWillLayoutSubviews()
        drawCircularLoader()
    
    
    func drawCircularLoader()
        let width = loaderView.bounds.width
        
        let halfWidth = width / 2
        let size = CGSize(width: halfWidth / 2, height: halfWidth / 2)
        
        let rect = CGRect(x: halfWidth - (size.width / 2), y: (halfWidth / 2) - (size.height / 2), width: size.width, height: size.height)
        
        let path = UIBezierPath(ovalIn: rect)
        let layer = CAShapeLayer()
        
        layer.frame = rect
        layer.fillColor = UIColor.black.cgColor
        
        
        layer.path = path.cgPath
        
        loaderView.layer.addSublayer(layer)
        
        let rotation = CABasicAnimation(keyPath: "transform.rotation")
        rotation.fromValue = 0
        rotation.toValue = 2.0 * .pi
        rotation.duration = 1.5
        layer.add(rotation, forKey: nil)
        
        let scaling = CABasicAnimation(keyPath: "transform.scale")
        scaling.toValue = 1.2
        scaling.duration = 0.3
        scaling.autoreverses = true
        
        let group = CAAnimationGroup()
        group.animations = [rotation, scaling]
        group.repeatCount = .infinity
        layer.add(group, forKey: nil)
        
    



【问题讨论】:

【参考方案1】:

直接的问题是动画组没有持续时间。它需要足够长的持续时间才能完成所有子动画。否则,一切都会在 0.2 秒后停止(默认值)。尝试给小组 1.5 的持续时间。

从更广泛的意义上说,我怀疑您的总体目标是否是充分利用动画组。但那是另一回事。另外你有两个变换动画;它们可能会相互干扰(变换是一个动画属性),因此可能需要不同的方法。

【讨论】:

以上是关于ios中的组动画的主要内容,如果未能解决你的问题,请参考以下文章

聊聊iOS中的动画

iOS中的显示动画(属性动画)

iOS核心动画中的常用类型

iOS 10 中的动画错误

UIImageView 中的 iOS 11 动画 gif 显示

iOS 7 中的 iOS 6 滑动推送控制器动画