我正在构建一个应用程序,该应用程序将在某个功能运行时显示动画,并在下一个功能运行时将其删除。但是,当它循环回来时,我需要它重新启动。
我已经能够将其从视图中删除
isHidden = true
但是,如果我依靠它来恢复它,当它再次运行时,它会在第一个动画上叠加第二个动画,然后我取消隐藏它。
我也可以使用.removeFromSuperView()
让它消失,但我不知道在那之后如何把它带回来。
以下是相关代码:
class ViewController: UIViewController {
// some code
let dots = UIImageView()
override func viewDidLoad() {
super.viewDidLoad()
// some code
dots.translatesAutoresizingMaskIntoConstraints = false
dots.backgroundColor = .red
dots.center = self.view.center
view.addSubview(dots)
// Some Auto Layout code
}
func showAnimatingDotsInImageView(_ isOn: Bool) {
let lay = CAReplicatorLayer()
if isOn == true {
lay.frame = CGRect(x: -55, y: 0, width: 30, height: 14) //yPos == 12
let circle = CALayer()
circle.frame = CGRect(x: 10, y: 10, width: 10, height: 10)
circle.cornerRadius = circle.frame.width / 2
circle.backgroundColor = rocketDark.cgColor//lightGray.cgColor //UIColor.black.cgColor
lay.addSublayer(circle)
lay.instanceCount = 5
lay.instanceTransform = CATransform3DMakeTranslation(20, 0, 0)
let anim = CABasicAnimation(keyPath: #keyPath(CALayer.opacity))
anim.fromValue = 0.0
anim.toValue = 1.0
anim.duration = 2
anim.repeatCount = .infinity
circle.add(anim, forKey: "animation")
lay.instanceDelay = anim.duration / Double(lay.instanceCount)
dots.layer.addSublayer(lay)
} else if isOn == false {
//lay.removeFromSuperlayer()
//lay.removeAllAnimations()
dots.removeFromSuperview()
//dots.stopAnimating()
}
}
正如您可能会说的那样,我试图拼凑出一种编写方式howAnimatingDotsInImageView(false)
来删除它并howAnimatingDotsInImageView(true)
重新启动它。