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 に答える