CAAnimation
是 Core Animation 框架中的一个类,用于创建和管理动画。Core Animation 是 macOS 和 iOS 平台上用于渲染 2D 和 3D 图形的高性能框架。CAAnimation
提供了多种类型的动画,如关键帧动画、过渡动画等。
CAAnimation
当视图不在视图层次结构中时,Core Animation 可能无法正确渲染动画。这是因为动画依赖于视图的渲染上下文,如果视图不在视图层次结构中,渲染上下文可能不可用。
let view = UIView()
// 确保视图已经添加到父视图中
superview.addSubview(view)
let animation = CABasicAnimation(keyPath: "position")
animation.fromValue = CGPoint(x: 0, y: 0)
animation.toValue = CGPoint(x: 100, y: 100)
animation.duration = 1.0
view.layer.add(animation, forKey: "positionAnimation")
CALayer
动画:如果视图不在视图层次结构中,可以尝试直接对 CALayer
进行动画。let layer = CALayer()
layer.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
layer.backgroundColor = UIColor.red.cgColor
let animation = CABasicAnimation(keyPath: "position")
animation.fromValue = CGPoint(x: 0, y: 0)
animation.toValue = CGPoint(x: 100, y: 100)
animation.duration = 1.0
layer.add(animation, forKey: "positionAnimation")
// 将 layer 添加到某个视图的 layer 中
superview.layer.addSublayer(layer)
let view = UIView()
superview.addSubview(view)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
let animation = CABasicAnimation(keyPath: "position")
animation.fromValue = CGPoint(x: 0, y: 0)
animation.toValue = CGPoint(x: 100, y: 100)
animation.duration = 1.0
view.layer.add(animation, forKey: "positionAnimation")
}
通过以上方法,可以确保在视图不在视图层次结构中时,仍然能够正确启动和运行 CAAnimation
。
领取专属 10元无门槛券
手把手带您无忧上云