我目前正在寻找一种方法来等待完成我的图像动画,然后在完成后启动下一个。
我想过使用一个完成处理程序,但它并不适合我#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)
答案 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)
}