NSThread使用
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor blackColor];
UIButton * btnStart = [[UIButton alloc]initWithFrame:CGRectMake(20, 20, 300, 40)];
[btnStart setTitle:@"START" forState:UIControlStateNormal];
[self.view addSubview:btnStart];
self.actView = [[ UIActivityIndicatorView alloc]initWithFrame:
CGRectMake(200, 100, 50, 50)];
[self.view addSubview:self.actView];
self.actView.activityIndicatorViewStyle =
UIActivityIndicatorViewStyleWhiteLarge;
self.actView.hidesWhenStopped = NO;
[btnStart addTarget:self action:@selector(bigTaskAction)
forControlEvents:UIControlEventTouchUpInside];
self.aProgressView = [[UIProgressView alloc]initWithFrame:
CGRectMake(20, 500, 300, 20)];
[self.view addSubview:self.aProgressView];
}
-(void)bigTaskAction{
[self.actView startAnimating];
[NSThread detachNewThreadSelector:@selector(bigTask) toTarget:self withObject:nil];
//[self bigTask];
}
-(void)bigTask{
@synchronized(self) {
int updateUIWhen = 2000;
for (int i=0; i<50000; i++) {
NSString * newString =[ NSString stringWithFormat:@"i = %i",i];
NSLog(@"%@",newString);
if (i==updateUIWhen) {
float f = (float)i/50000;
NSNumber *percentDone = [NSNumber numberWithFloat:f];
[self performSelectorOnMainThread:
@selector(updateProgressViewWithPercentage:)
withObject:percentDone waitUntilDone:YES];
updateUIWhen = updateUIWhen +2000;
}
}
[self performSelectorOnMainThread:
@selector(updateProgressViewWithPercentage:)
withObject:[NSNumber numberWithFloat:1.0] waitUntilDone:YES];
[self.actView stopAnimating];
}
}
-(void)updateProgressViewWithPercentage:(NSNumber *)percentDone {
[self.aProgressView setProgress:[percentDone floatValue] animated:YES];
}