3

我正在尝试预加载显示 UIActivityIndi​​cator 的纹理图集数组。加载纹理后,我想使用 .stopAnimating() 方法停止活动指示器。我插入了断点,发现编译器确实到达了 .stopAnimating() 方法,但什么也没发生……指示器继续……

我在这里做错了什么?

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

1 回答 1

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

}
于 2016-01-20T21:31:55.137 回答