WatchKit Image动画等待完成

时间:2015-04-07 18:06:51

标签: ios image swift watchkit

我目前正在寻找一种方法来等待完成我的图像动画,然后在完成后启动下一个。

我想过使用一个完成处理程序,但它并不适合我#34;有没有办法在这种情况下使用它?

if X > 1 {
            self.GroupIMG.setBackgroundImageNamed("single")
            self.GroupIMG.startAnimatingWithImagesInRange(NSRange(location: 0, length: 300), duration: Repeater, repeatCount: self.X)

        }



//this should start after the if is done

            self.GroupIMG.setBackgroundImageNamed("single")
            self.GroupIMG.startAnimatingWithImagesInRange(NSRange(location: 0, length: leftX), duration: Repeater, repeatCount: 1)

3 个答案:

答案 0 :(得分:2)

您必须创建一个与动画持续时间相同的计时器,并等待计时器触发以了解WatchKit动画何时结束。

以下是Apple在Apple开发论坛上对此问题的回应。

  

目前还没有办法知道动画何时结束,如   我们还没有在WatchKit的API中公开完成处理程序。请提交   如果您愿意,可以http://bugreport.apple.com处的增强请求   看到添加的东西。过去,你可以使用所描述的方法,   请注意,根据您的喜好,它可能无法正常工作   情况。如果您需要,可以选择更改UI   总是被发现。

您可以在此处阅读完整主题https://devforums.apple.com/message/1087798#1087798。基本上使用计时器并不完美,但它是你拥有的最好的。

答案 1 :(得分:2)

问题已经解决,但这是我的解决方案,每个人都可以使用并从中受益。 :)你不必创建任何计时器。只需用你想要执行的代码创建一个简单的队列(动画/完成处理),你就完成了。我的小框架将把所有东西连在一起并执行和/或等到你想要它。

这是一个简短的例子(与GitHub相同)。我将使用更详细的示例更新GitHubs页面。

/* One simple example how to create a complex Timeline object. */

Timeline.with(identifier: "SomeIdentifier") { (queue) -> Void in

    queue.add(delay: 0.0, duration: 2.0, execution: {

        // some code that will take assumed 2.0 seconds

    }, completion: {

        // some code that will excutes after 'delay' + 'duration'
    })

    queue.add(delay: 0.5, duration: 1.0, execution: {

        // some code that will executes after the top block + 'delay' time
        // this code is assumed to take 1.0 seconds by the deloper 

    })
        // any code between queue adding functions will executes immediately

}.start

TimelineKit - 框架是用Swift编写的。

现在,您可以为WatchKit应用程序创建复杂动态的动画。 随意给我一些反馈。 :)

以下是您的代码的外观。还有一个完成处理的时间轴。

<强>更新

    if X > 1
    {
        /* the duration is aussumed to take 'Repeater * self.X' seconds */
        Timeline.with(identifier: "MyAnimation", delay: 0.0, duration: Repeater * self.X, execution: {

            self.GroupIMG.setBackgroundImageNamed("single")
            self.GroupIMG.startAnimatingWithImagesInRange(NSRange(location: 0, length: 300), duration: Repeater, repeatCount: self.X)

        }, completion: {

            self.GroupIMG.setBackgroundImageNamed("single")
            self.GroupIMG.startAnimatingWithImagesInRange(NSRange(location: 0, length: leftX), duration: Repeater, repeatCount: 1)
        }).start
    }

答案 2 :(得分:0)

你可以使用完成处理程序,这很简单:

  • 在任何地方声明你的功能:

    func myFunc( completion:() -> ())
    {
        // Your code here
        self.GroupIMG.setBackgroundImageNamed("single")
        self.GroupIMG.startAnimatingWithImagesInRange(NSRange(location: 0, length: 300), duration: Repeater, repeatCount: self.X)
    
     completion()
    }
    
  • 在你的代码中
  • ,调用函数:

    myFunc()
    {
      Void in
      // Your completion code
    
      self.GroupIMG.setBackgroundImageNamed("single")
      self.GroupIMG.startAnimatingWithImagesInRange(NSRange(location: 0,   length: leftX), duration: Repeater, repeatCount: 1)
    }