在核心动画开始之前分层样式的正确方法是什么?

What is a correct way to layer styling before begin time of core animation?

我用 Core Animation 创建了一个函数,它使层高度从 0 到 N 动画化,并且它是可延迟的。

extension CALayer {
    func animate(to height: CGFloat, duration: Double, delay: Double) {
        let animation: CABasicAnimation = .init(keyPath: "bounds.size.height")

        animation.fromValue = 0
        animation.toValue = height
        animation.beginTime = CACurrentMediaTime() + delay
        animation.duration: duration
        animation.timingFunction = .init(name: kCAMediaTimingFunctionEaseInEaseOut)

        // I want to improvement this part.
        //
        // self.isHidden = true
        //
        // DispatchQueue.main.asyncAfter(deadline: .now() + delay) {
        //     self.isHidden = false
        // }

        self.bounds.size.height = height
        self.add(animation, forKey: "bounds.size.height")
    }
}

并且层在动画期间确实变换得很好,但它 returns 在开始时间之前和完成之后达到原始高度。所以我不得不根据延迟时间设置图层isHidden

但我不认为这是一种安全的方式。所以我想改进那个代码。

遇到这种情况你一般会怎么做?

尝试设置 animation.fillMode = .backwards。我认为这将使动画将其 fromValue 应用到层,直到达到动画的 beginTime