我正在构建一个苹果手表的小应用程序.我里面有一个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,所以也许这与操作系统目前处于beta状态有关?
解决方法
我遇到了同样的问题.
这是因为您第一次尝试时,手表需要时间才能加载图像.苹果也没有给我们任何“预加载”的方法,所以我想出了一些工作:
当我的控制器显示时:
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) } }
这是我找到解决这个问题的最好办法,它适用于我.