UIActivityIndicatorViewが動かない。
メソッドの中で、重い処理が合ったので、
MenuViewController.h
@interface MenuViewController : UIViewController { UIActivityIndicatorView *indicator; } -(void) shori; @end
MenuViewController.m
- (void)viewDidLoad { [super viewDidLoad]; indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; indicator.frame = CGRectMake(100.0, 100.0, 50.0, 50.0); indicator.center = self.view.center; [self.view addSubview:indicator]; } -(void) shori { [indicator startAnimating]; /* 重い処理 */ [indicator stopAnimating]; }
としたが、動かなかった。
google先生に聞いてみた所、同じスレッドで実行しちゃ駄目と言われる。
別スレッドで行うには
performSelectorInBackgroundを使えば良いらしいのだが、引数が一つしかとれない。
しかも、「本スレッドの中でなければUIは操作してはいけない。」との制限付き。
結局、startAnimatingと、stopAnimatingをバックグラウンドで行う事に。
-(void) shori { [self performSelectorInBackground:@selector(indicatorStart) withObject:nil]; /* 重い処理 */ [self performSelectorInBackground:@selector(indicatorStop) withObject:nil]; } -(void) indicatorStart { [indicator startAnimating]; } -(void) indicatorStop { [indicator stopAnimating]; }