Geo*_*dis 2 iphone cocoa objective-c ibaction ios
这是我的代码:
-(IBAction)saveDownloadedImage
{
NSLog(@"Test"); EXECUTED
indicatorView.hidden = NO; NOT EXECUTED
[indicatorView startAnimating]; NOT EXECUTED
[statusLabel setText:@"WHY?"]; NOT EXECUTED
[currentPicture setImage:[imageView image]]; EXECUTED
ImageFileManager *fileManager = [[ImageFileManager alloc] init]; EXECUTED
[fileManager saveImageToDisk:currentPicture]; EXECUTED
indicatorView.hidden = YES;
[statusLabel setText:@"Image saved successfully."]; EXECUTED
saveButton.enabled = NO; EXECUTED
Run Code Online (Sandbox Code Playgroud)
}
节约的过程大约需要5秒钟.因此,在UI中查看指标是正常的.但没有任何反应!任何的想法?
一切都在执行.您的问题是saveImageToDisk
调用是同步的,您是从UI线程调用它.当您阻止UI线程时,没有任何东西被重新绘制.显示指示器但是直到IBAction
返回它再次隐藏时才能将其绘制到屏幕上.
您必须异步调用保存方法.
阻止UI线程永远不是一个好主意.
编辑:请参阅以下问题的答案以获得正确的解决方案:在ios中异步调用数据库
Edit2:可能的解决方案之一(未测试)
-(IBAction)saveDownloadedImage {
indicatorView.hidden = NO; //Note you can use hidesWhenStopped property for this
[indicatorView startAnimating];
[statusLabel setText:@"BECAUSE..."];
[currentPicture setImage:[imageView image]];
[NSThread detachNewThreadSelector:@selector(save) toTarget:self withObject:nil]
}
- (void)save {
@autoreleasepool {
ImageFileManager *fileManager = [[ImageFileManager alloc] init];
[fileManager saveImageToDisk:currentPicture];
[self performSelectorOnMainThread:@selector(updateUI) withObject:nil waitUntilDone:NO];
}
}
- (void)updateUI {
indicatorView.hidden = YES;
[statusLabel setText:@"Image saved successfully."];
saveButton.enabled = NO;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
682 次 |
最近记录: |