2014年3月15日土曜日

【備忘録】処理中のお知らせ機能

画像処理など重い処理をする場合、処理中である旨を知らせる機能があると便利だと思い、くるくると回るアニメーションを追加しました。

問題なのは、くるくるの開始後すぐに重い処理を実行するとくるくるしないという事です。
くるくる開始と処理を別スレッドにする事で解決しました。

情報筋によると、メインスレッドでは重い処理をしないのが基本とあるので、重い処理は別スレッドでやろう。さらに情報筋曰く、くるくる開始と停止はメインスレッドでやると吉という。

[self->mIndicator startAnimating];
//1 処理を別スレッドで実行
[self performSelectorInBackground:@selector(ProcessingProgress) withObject:nil];
//2 処理を別スレッドで実行
[NSThread detachNewThreadSelector:@selector(ProcessingProgress)toTarget:self withObject:self];
//【スレッド】進捗の表示
- (void)ProcessingProgress{
    @autoreleasepool {
        //画像処理
        ConvertImage()
        //アニメーションの停止
        if ([self->mIndicator isAnimating] == true) {
            [self->mIndicator stopAnimating];
        }
    }
}

1と2はどちらもスレッドを実行するための記述ですが、今回は1を使ってます。

下記サイトを参考にしました。
ありがとうございました。

NSThreadを使ったスレッド処理
http://iphone-dev.g.hatena.ne.jp/sohei/20100524/1274704461

ARC時スレッド内
http://blog.natsuapps.com/2011/11/ios5-arc-autorelease-bridge-xcode.html

無題メモランダム
http://blog.mudaimemo.com/2010/05/iphoneuiactivityindicatorview.html

ソースコードをドラマチックに貼付け

ソースコードをハイライトするウィジェット「Code Prettify」を試しに導入してみます。

下記サイトを参考にしました。ありがとうございました。
貼付けに必要な変換処理もしてくれる便利なサイトでした。
http://www.kuribo.info/2008/04/code-prettify.html

    //UIActivityIndicatorViewのインスタンス化
self->mIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
self->mIndicator.frame = CGRectMake(0, 0, 100, 100);
self->mIndicator.center = self.view.center;
[self.view addSubview:self->mIndicator];
self->mIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
self->mIndicator.frame = CGRectMake(0, 0, 100, 100);
self->mIndicator.center = self.view.center;
[self.view addSubview:self->mIndicator];
self->mIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
self->mIndicator.frame = CGRectMake(0, 0, 100, 100);
self->mIndicator.center = self.view.center;
[self.view addSubview:self->mIndicator];