2016-01-20 41 views
3

我試圖預加載紋理圖集的陣列在此期間,會顯示一個UIActivityIndi​​cator。一旦紋理加載,我想使用.stopAnimating()方法停止活動指示器。我已經插入斷點和發現,編譯器獲取到.stopAnimating()方法,但沒有任何反應......的指標繼續...雪碧套件UIActivityIndi​​cator不會停止動畫

我在做什麼錯在這裏?

class Menu: SKScene { 

var activityInd: UIActivityIndicatorView! 

override func didMoveToView(view: SKView) { 

    activityInd = UIActivityIndicatorView(activityIndicatorStyle: .WhiteLarge) 
    activityInd.center = CGPointMake(self.frame.midX, self.frame.midY) 
    activityInd.startAnimating() 
    scene!.view?.addSubview(self.activityInd) 

    SKTextureAtlas.preloadTextureAtlases([saxAtlas, saxIdleAtlas, drumAtlas, drumIdleAtlas, pianoAtlas, pianoIdleAtlas, bassAtlas]) {() -> Void in 
      self.activityInd.stopAnimating() 
     } 
} 
+0

嘗試添加'self.activityInd.removeFromSuperview()'並查看是否被調用。 –

回答

1

通常,當你想停止活動的指標,你只需要調用removeFromSuperview(),因爲它是沒有好有一個靜態活動的指標坐在那裏什麼都不做,而這一切是stopAnimating()給你。

你也應該在主線程中調用這個方法,因爲preloadTextureAtlases是一個後臺任務,任何前綴'UI'的任何東西都需要在主線程上運行。

SKTextureAtlas.preloadTextureAtlases([saxAtlas, saxIdleAtlas, drumAtlas, drumIdleAtlas, pianoAtlas, pianoIdleAtlas, bassAtlas]) {() -> Void in 

    dispatch_async(dispatch_get_main_queue()) {() -> Void in 
     self.activityInd.stopAnimating() 
    }    

} 
+0

感謝,可惜呼籲preloadtextureatlases不起作用在完成處理程序的任何方法:.removeFromSuperview,阿爾法等所有不工作... – drockFai

+0

也許你需要調用'stopAnimating()'主線程上。 –

+0

實際上在主線程上調用它是行得通的,但我不想在紋理地圖集加載後停止活動指示器......嘗試在主線程上使用if語句在完成處理程序中設置Bool,但它似乎我無法調用活動指示器上的任何方法,除非它在主線程中......即使在if語句中它不會被調用。 – drockFai