UIActivityIndicatorView
長いジョブを実行中に UIActivityIndicatorView を表示したい場合。UIActivityIndicatorView は一旦 currentRunLoop に戻らないと表示されないので、以下のようにジョブをくくっても表示されない。
ruby>>
UIActivityIndicatorView* wAI = [ [ [ UIActivityIndicatorView alloc ] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge ] autorelease ];
[ [ UIApplication sharedApplication ].keyWindow addSubview:wAI ];
wAI.center = CGPointMake( 160, 240 );
[ wAI startAnimating ];
[ self 長いジョブ ];
[ wAI removeFromSuperview ];
<<--
表示させるための一つ目のアイディアは以下のように currentRunLoop を一瞬だけ動かす方法。
ruby>>
[ wAI startAnimating ];
[ NSRunLoop.currentRunLoop runUntilDate:[ NSDate dateWithTimeIntervalSinceNow:0.0 ] ];
[ self LongJob ];
<<--
2つ目のアイディアはジョブとインディケータを currentRunLoop に戻ったあと動くようにスケジュールすること。
ruby>>
wAI.startAnimating;
[ self performSelector:@selector(LongJob) withObject:nil afterDelay:0 ];
[ wAI performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:0 ];
<<--
ネットで別スレッドでやってる例をよく見るが、その必要はない。
単に currentRunLoop が動けばいい。
別スレッドにするとしたら、長いジョブの方。