我正在为 Apple Watch 构建一个小应用程序。我里面有一个组和一个标签。我想做的是:
- 组的动画背景图片
- 在图像动画结束后淡入标签
我的代码基本上是这样的:
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 block 动画时,当我通过点击表冠离开应用程序并通过双击它返回时,dispatch_after block 没有被触发,或者背景动画第一次调用时没有正确呈现(我认为是第二次,因为我尝试在调度 block 中添加一个断点,并且每次测试时它都会触发)。 我正在运行 watchOS2,所以这可能与操作系统当前所处的 Beta 状态有关?
最佳答案
我遇到了和你一样的问题。
发生这种情况是因为在您第一次尝试时, watch 需要时间来加载图像。苹果也没有给我们任何“预加载”方法,所以我想出了一些解决方法: 何时显示我的 Controller :
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)
}
}
这是我找到的解决此问题的最佳方法,对我很有效。
关于ios - Apple Watch - 慢速图像动画第一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32414695/