23756


APIの都合上、どうしてもメインスレッドでないと行えない処理があるのですが、その処理に４秒程度の時間がかかります。

なので、アニメーション付きの UIActivityIndicatorView
を表示したいのですが、メインスレッドがブロックされているため、おそらくアニメーションされないかと思います。（表示処理をしてすぐに思いAPIをコールするので、処理が完了するまで描画処理が行われず、アニメーションされない状態での表示もむりな気がします。）

なにか、特殊なもので、アプリのメインスレッドをブロックしていてもビジー状態をスクリーン（ステータスバーではない）に表示できる方法などはありますか？

* * *

ちなみに、行いたい重い処理は以下ですが、等倍ではなく、高解像度で処理しないといけないので他のもので代用できないかとおもいます。（ただ単にRetinaようではなく、印刷用にも）

[code]

    UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, scale*2/*Retina用に２倍のサイズで作成*/);
    
        view.layer.renderInContext(UIGraphicsGetCurrentContext()!);
        let image = UIGraphicsGetImageFromCurrentImageContext();
    
        UIGraphicsEndImageContext();
    
[/code]

メインスレッドをブロックしていてもアニメーションするのが  
あるとすれば、OSの機能になるかと思いますが。。。


CC BY-SA 3.0
2016-04-05T05:51:33.037
23754
2016-04-05T12:40:05.173
2016-04-05T06:16:38.290
76
10346
question
ios swift iphone
メインスレッドをブロックしつつ、ビジーアイコンを表示する


こんな感じでどうでしょうか？  
検証はしていませんので動かなかったらごめんなさい。

[code]

    // メインスレッドでsomething()呼び出し
    func something()
    {
        // ここでUIActivityIndicatorViewを回す
        ...
    
        dispatch_async(dispatch_get_main_queue, {
            // 重い処理をメインスレッドで実行
            ...
        })
    }
    
[/code]

追記しました。  
作ってみたサンプルだとsleep中ActivityIndicatorは回っていましたよ。  
iOSSimulatorですが。  
質問内容から答えられるのはここまでです。

[code]

    class ViewController: UIViewController {
        @IBOutlet var indicator:UIActivityIndicatorView!
        override func viewDidLoad() {
            super.viewDidLoad()
            indicator.startAnimating()
            dispatch_async(dispatch_get_main_queue(), {
                NSLog("heavy in")
                UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, false, 2/*Retina用に２倍のサイズで作成*/)
                self.view.layer.renderInContext(UIGraphicsGetCurrentContext()!);
                let image = UIGraphicsGetImageFromCurrentImageContext();
                UIGraphicsEndImageContext();
                sleep(5)
                NSLog("heavy out")
            })
        }
    }
    
[/code]

//2016-04-05 21:37:06.370 a[16248:304335] heavy in  
//2016-04-05 21:37:11.379 a[16248:304335] heavy out


CC BY-SA 3.0
2016-04-05T06:43:04.323
23756
2016-04-05T12:40:05.173
2016-04-05T12:40:05.173
8601
8601
23754
answer