2015-09-05 46 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) 
          } 
         } 
    

    這是我發現解決這個問題的最好方法,它適用於我。