我正在为苹果手表制作一个小应用程序。我里面有一个Group和一个Label。我想做的是:
我的代码看起来基本上是这样的:
group.setBackgroundImageNamed("show_back-");
group.startAnimatingWithImagesInRange(NSMakeRange(0, 39), duration: 1.5, repeatCount: 1);
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(1.5 * Double(NSEC_PER_SEC)))
dispatch_after(delayTime, dispatch_get_main_queue()) { () -> Void in
self.animateWithDuration(1) { () -> Void in
self.label.setAlpha(1)
};
};
问题是第一次触发此序列时,图像动画的运行速度似乎慢于1.5秒,因为标签在图像停止变化之前开始淡入淡出。如果在应用程序运行时再次触发此操作,则一切都按预期工作。我想它与图像预加载有什么关系。
如何让它始终如一地运作?我无法在图像序列动画上找到任何类型的回调来订阅。
修改 我注意到的另一个问题:我有另一种情况,当bg从dispatch_after块动画时,当我通过点击表冠离开应用程序并通过双击它返回时,或者不触发dispatch_after块,或者背景动画在第一次调用它时没有正确呈现(我想第二次,因为我尝试在调度块中添加一个断点,并且每次测试时它都会触发)。 我正在运行watchOS2,所以它可能与操作系统目前处于测试状态有关吗?
答案 0 :(得分:1)
我遇到了和你一样的问题。
这是因为在您第一次尝试时,手表需要时间来加载图像。苹果也没有给我们任何“预加载”方法,所以我想出了一些工作: 当我的控制器显示时:
func willActivate()
我在背景中播放动画序列一次,这样当我的用户点击它时图像已经加载。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { [weak self] in
if let uSelf = self {
uSelf.statusAnimationImage.setImageNamed("my image name")
uSelf.statusAnimationImage.startAnimatingWithImagesInRange(NSMakeRange(0, 359), duration: 0.5, repeatCount: 1)
}
}
这是我找到解决这个问题的最好方法,它对我有用。
答案 1 :(得分:0)
尝试做
group.setBackgroundImageNamed("show_back-");
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(1.5 * Double(NSEC_PER_SEC)))
dispatch_after(delayTime, dispatch_get_main_queue()) { () -> Void in
self.animateWithDuration(1) { () -> Void in
group.startAnimatingWithImagesInRange(NSMakeRange(0, 39), duration: 1.5, repeatCount: 1);
self.label.setAlpha(1)
};
};
我不确定你在做什么,但也尝试做animateWithDuration(0)或(1.5)