Sprite Kit的UIActivityIndicator不会停止动画

3
我正在尝试在显示UIActivityIndicator时预加载一组纹理图集。一旦纹理加载完成,我希望使用.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()
        }
}

尝试添加 self.activityInd.removeFromSuperview() 然后查看是否被调用。 - Beau Nouvelle
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()
    }            

}

很抱歉,对于preloadtextureatlases的完成处理程序中调用任何方法都不起作用:.removeFromSuperview、.alpha等都不起作用...谢谢。 - derekFairholm
实际上在主线程上调用它确实可以工作,但我希望在纹理图集加载完成后停止活动指示器...尝试在完成处理程序中设置一个布尔值,并在主线程上使用if语句,但似乎除非在主线程上,否则无法调用活动指示器上的任何方法...即使在if语句中也不会被调用。 - derekFairholm
谢谢!非常感谢。 - derekFairholm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接