微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

移至另一个屏幕时,保持CABasicAnimation运行

如何解决移至另一个屏幕时,保持CABasicAnimation运行

在这里,听起来像是一个基本问题……

我制作了一个运行CABasicAnimation的简单应用程序:如果我关闭该应用程序并重新打开,则动画仍在继续(这是完美的),但是如果我在同一应用程序中更改屏幕然后又回来,则动画停止(这很糟糕)。

任何提示ti都可以帮助我解决问题并在用户位于同一应用程序的另一个屏幕上时使动画继续运行吗?

    override func viewDidLoad() {
    super.viewDidLoad()
    swipeVC()
    myCircle()
}

    // Animated circle
func myCircle() {
    
    // Center the shape
    let center = view.center
    
    // Create back shape
    let backlayer = CAShapeLayer()
    let circulationPath = UIBezierPath(arcCenter: center,radius: 100,startAngle: -CGFloat.pi / 2,endAngle: 2 * CGFloat.pi,clockwise: true)
    
    // Designing the animated circle
    backlayer.path = circulationPath.cgPath
    backlayer.fillColor = UIColor.clear.cgColor
    backlayer.strokeColor = UIColor.red.cgColor
    backlayer.linewidth = 5
    view.layer.addSublayer(backlayer)
    
    // Designing the animated circle
    shapeLayer.path = circulationPath.cgPath
    shapeLayer.fillColor = UIColor.clear.cgColor
    shapeLayer.strokeColor = UIColor.green.cgColor
    shapeLayer.linewidth = 10
    shapeLayer.strokeEnd = 0
    shapeLayer.lineCap = .round
    
    // Add gesture recgnition to activate the circle animation
    view.addGestureRecognizer(UITapGestureRecognizer(target: self,action: #selector(handleTap)))
    
    // Adding the circle to the main view
    view.layer.addSublayer(shapeLayer)
    
}

解决方法

据我所知,当应用程序进入后台/导航到其他页面时,IOS会删除动画,这就是为什么您看到“动画已停止”的原因。

我建议您在离开应用程序或页面时保存动画的当前状态(例如完成率),并在返回时恢复动画,例如在viewWillAppear中或添加一个监听UIApplicationWillEnterForeground的观察者

override func viewDidLoad() {
    super.viewDidLoad()
    ...
    // listening to when the app will enter foreground
    NotificationCenter.default.addObserver(self,selector: #selector(resumeAnimation),name: NSNotification.Name.UIApplicationWillEnterForeground,object: nil)
}

override func viewWillAppear() {
    super.viewWillAppear()
    ...
    // when come back from other screen
    resumeAnimation()
}

private resumeAnimation() {
    // re-draw the animation based on stored state
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。