UIImagePickerController的didFinishPickingMediaWithInfo太慢了,我能添加ProgressHUD/indicator吗?

9

对于UIImagePickerController,我打开了

picker.allowsEditing = YES;

用户可以在从相册中选择或拍摄照片后进行移动和缩放。当用户点击“选择”或“使用”按钮时,整个应用程序会冻结超过5秒钟,然后通过照片返回。

- (void)imagePickerController:(UIImagePickerController*)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info

我尝试在这个委托函数中添加一个指示器,但它没有出现...我猜想,在这个回调之前发生了长时间的延迟,可能是由于ful的“编辑”引起的。
有没有可能处理这个问题?我只是希望给用户一个良好的体验。 :)
非常感谢!
2个回答

6
你应该在另一个线程上使用NSAutoreleasePool执行此操作,代码示例如下:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo {
   [self.navigationController dismissModalViewControllerAnimated:YES];   
   [NSThread detachNewThreadSelector:@selector(uploadImage:) toTarget:self withObject:image];  
}

- (void)uploadImage:(UIImage *)image {
   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
   // Handle chosen photo
   [pool release];
}

非常感谢,但是我尝试了,什么也没有改变...点击“选择”后仍然有延迟.... - Dobby
你在处理图片方面有什么操作吗?或者在didFinishPickingImage代码块中有什么操作吗?所有操作都应该在NSAutoreleasePool和[pool release]内完成。 - Kolin Krewinkel
亲爱的Kolin,uploadImage函数内的所有内容都已完成...我的代码完全按照你的来写 :) - Dobby
你在代码块里做了什么?对我来说,它立即加快了速度。 - Kolin Krewinkel

0
你是从主线程调用UIImagePicker吗?
这段代码应该从那里调用。每当我在任何与UI相关的事情上遇到这个确切的5秒延迟时,都是因为代码被从另一个线程调用,而不是主线程。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接