2015-09-05 65 views
15

我正在为苹果手表打造一个小应用程序。我在里面有一个组和一个标签。我正在试图做的是: 苹果手表 - 慢镜头动画第一次

  • 淡入标签图像动画完成后,该组的

    • 动画背景图像结束

    我的代码看起来基本上是这样的:

     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块没有被触发,或者第一次被调用时背景动画不能被正确渲染(我想第二个,因为我试图在dispatch块中添加一个断点,并且每次测试都会触发它)。 我正在运行watchOS2,所以它可能与操作系统当前处于测试状态有关?

  • +0

    你使用模拟器吗? – needshelp

    +3

    @needshelp不,我正在测试一个真实的设备;在模拟器上一切正常。 – alchemiss

    +0

    你的图像大小是多少? – Swinny89

    回答

    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)

    0

    我遇到同样的问题,因为你。

    发生这种情况是因为第一次尝试时,手表需要时间来加载图像。此外苹果并没有给我们任何“预加载”的方法,所以我想出了一点点解决它: 时,将显示我的控制器:

    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) 
          } 
         } 
    

    这是我发现解决这个问题的最好方法,它适用于我。