苹果手表 - 第一次慢图像动画

时间:2015-09-05 15:22:03

标签: ios swift watchkit apple-watch watch-os-2

我正在为苹果手表制作一个小应用程序。我里面有一个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,所以它可能与操作系统目前处于测试状态有关吗?

2 个答案:

答案 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)