我用Core Animation创建了一个函数,该函数将图层高度从0设置为N,并且可以延迟。
] st
该层在动画过程中的变形效果很好,但是在开始时间之前和结束之后它会返回到原始高度。因此,我不得不根据时间设置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")
}
}
层来延迟。
但是我认为这不是一种安全的方法。所以我想改进该代码。
在这种情况下,您通常做什么?
答案 0 :(得分:1)
尝试设置animation.fillMode = .backwards
。我认为这将使动画将其fromValue
应用于图层,直到达到动画的beginTime
。