以下是一个使用CAReplicatorLayer创建马赛克灯光秀动画的示例代码:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 创建一个CAReplicatorLayer作为背景
let replicatorLayer = CAReplicatorLayer()
replicatorLayer.frame = view.bounds
view.layer.addSublayer(replicatorLayer)
// 创建一个灯光视图
let lightView = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: 100))
lightView.backgroundColor = .yellow
lightView.layer.cornerRadius = 5
lightView.alpha = 0
// 在CAReplicatorLayer上添加灯光视图
replicatorLayer.addSublayer(lightView.layer)
// 设置CAReplicatorLayer的属性
replicatorLayer.instanceCount = 20 // 设置复制的数量
replicatorLayer.instanceDelay = 0.1 // 设置延迟时间
// 创建一个移动动画
let moveAnimation = CABasicAnimation(keyPath: "position.y")
moveAnimation.toValue = view.bounds.height // 移动到屏幕底部
moveAnimation.duration = 2.0 // 动画持续时间
moveAnimation.repeatCount = .infinity // 无限重复
moveAnimation.autoreverses = true // 自动反转
// 创建一个渐变动画
let fadeAnimation = CABasicAnimation(keyPath: "opacity")
fadeAnimation.toValue = 1 // 渐变到完全不透明
fadeAnimation.duration = 1.0 // 动画持续时间
fadeAnimation.repeatCount = .infinity // 无限重复
fadeAnimation.autoreverses = true // 自动反转
// 将移动动画和渐变动画添加到灯光视图上
lightView.layer.add(moveAnimation, forKey: nil)
lightView.layer.add(fadeAnimation, forKey: nil)
}
}
这个示例代码创建了一个CAReplicatorLayer作为背景,并在其上方创建了一个灯光视图。然后设置了CAReplicatorLayer的相关属性,包括复制的数量和延迟时间。接下来,创建了一个移动动画和一个渐变动画,并将它们添加到灯光视图上。最后,将灯光视图添加到CAReplicatorLayer上。运行代码,你会看到屏幕上出现多个灯光视图,它们以动画方式移动并渐变。
希望这个示例能帮助到你!