CATransaction 动画问题

Posted

技术标签:

【中文标题】CATransaction 动画问题【英文标题】:CATransaction Animation Issue 【发布时间】:2019-04-02 16:34:36 【问题描述】:

我有一个CAShapeLayer 并试图为几个属性设置动画。一开始我确实使用了CABasicAnimation,但是由于这个循环一遍又一遍,我需要最有效的方法来做到这一点。

以下代码动画正确:

    private func animateDidBecomeStraight () 
            CATransaction.flush()
            CATransaction.begin()
            CATransaction.setAnimationDuration(0.2)
                self.myShape.fillColor = UIColor.Red.cgColor
                self.myShape.lineWidth = 1
                self.myShape.strokeColor = UIColorRed.cgColor
            CATransaction.commit()
    

 private func animateDidBecomeUnStraight () 

        CATransaction.begin()
        CATransaction.setAnimationDuration(0.5)
            self.myShape.fillColor = UIColor(white: 1, alpha: 1).cgColor
            self.myShape.strokeColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5).cgColor
            self.myShape.lineWidth = 0.1
        CATransaction.commit()

    

Strait and Unstraight 按顺序调用,从不重复调用。

问题

第一次,动画以适当的持续时间工作。当 Strait 第一次打电话和 Unstraight 第一次打电话时。在那之后,他们似乎失去了动画持续时间。变化似乎是立竿见影的。

【问题讨论】:

那么目标是什么?它是笔直的,直的,直的,直的……永远的吗?如果是这样,你的“循环”在哪里?我看不出你是如何触发这些动画的,当然也不是一个接一个。此外,CABasicAnimation 实际上是执行此操作的正确方法,因此请显示那个代码。 【参考方案1】:

CATransaction 不是如何做到这一点的。创建两个 CABasicAnimation 对象,一个用于直线,一个用于非直线。将它们一起加入 CAAnimationGroup。现在将 CAAnimationGroup 配置为重复。

【讨论】:

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

核心动画警告:“未提交的 CATransaction”

将动画添加到子视图时立即调用 CATransaction 完成块

iPhone - UINavigationController - 使用 CATransaction 自定义动画

如何使用 CATransaction 为 CALayer 的出现设置动画?

带有 CATransaction 的 CALayer 动画在视图调整大小之前表现不同

CATransaction 完成块成功或失败