【问题标题】:Run animation until a button is pressed运行动画,直到按下按钮
【发布时间】:2014-10-09 06:57:09
【问题描述】:

我正在尝试制作一个动画应该在按下按钮之前运行的应用程序。我尝试使用无限循环,但使用该循环我的应用程序根本没有运行。它正在消耗所有内存。我还尝试在完成时再次调用相同的函数,但该过程也消耗了 100% 的 CPU。

你能指导我在这里做什么吗?

场景就像在视图的背景中,动画应该连续运行,直到按下按钮。按下按钮时将打开另一个视图,并且另一个动画将继续运行,直到按下其他按钮。 以下是我的代码:

func unlimitedLoop()
    {            
        rotating = true            
        self.ProcurementSupport.transform = CGAffineTransformMakeTranslation(0, 100)
        self.ProcurementSupport.hidden = false            
        UIView.animateWithDuration(3, delay: 2, usingSpringWithDamping: 2, initialSpringVelocity: 2, options: nil, animations: {
            //   self.EquipmentSupport.hidden = true

            var x:NSTimeInterval = 2                    
                springWithDelay(2, x, {
                    self.ProcurementSupport.transform = CGAffineTransformMakeTranslation(0,0)
                    self.EquipmentSupport.transform = CGAffineTransformMakeTranslation(1000,0)
                    x=x+2
                })                    
                springWithDelay(2, x, {
                    self.EquipmentSupport.transform = CGAffineTransformMakeTranslation(0,100)
                    x=x+2
                })                    
                springWithDelay(2, x, {
                    self.ProcurementSupport.transform = CGAffineTransformMakeTranslation(1000,0)
                    self.EquipmentSupport.transform = CGAffineTransformMakeTranslation(0,0)
                    x=x+2
                })
                springWithDelay(2, x, {
                    self.ProcurementSupport.transform = CGAffineTransformMakeTranslation(0, 100)
                    x=x+2
                })
            }, completion: {finished in self.unlimitedLoopAgain()})
    }

【问题讨论】:

    标签: ios swift uibutton uiviewanimation


    【解决方案1】:

    通过创建无限循环来制作自定义动画时,您需要在单独的线程上运行此函数。除了循环本身,最好每帧停止线程一小段时间,例如调用 sleep 1.0/60.0 以获得大约 60FPS。这种方法出现的另一个问题是,当新线程更改视图系统上的参数时,它很可能会回调主线程以刷新视图“设置需要显示”。在任何情况下,您都不应该创建这样的函数并在其中调用内置动画,您需要自己制作动画。

    在您的情况下,更好的方法通常是使用某种计时器或显示链接。每次显示重绘时都会触发此项目,因此它非常适合您的动画。这些调用通常已经在主线程上,因此您不需要其他任何东西。应该避免再次调用内置动画。

    另一种方法是使用某种递归。每次更新动画时,您都会在一些延迟时间 (1.0/60.0) 后调用相同的更新方法...

    无论如何,您的无限循环只是继续执行并占用所有处理器能力,但没有其他方法因此而被执行,因此您根本看不到任何结果。您需要一种方法让系统在帧之间执行其他方法(更新调用),以便在每次更新后停止执行一段时间或将其放在单独的线程上。这两种方式都可以让主线程做其他事情。

    【讨论】:

      猜你喜欢
      • 2020-11-26
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      相关资源
      最近更新 更多