当Apple推出iPhone OS 3.0版本时,UIImagePickerController略有改变:在用户确认最近拍摄的照片后,它不再提供活动或进度指示器。简而言之,你现在 - 拍照, - 决定没关系 - 点击“使用”按钮并等待。 没有迹象表明您是否实际点击了“使用”按钮。通常,我打了好几次,因为我不确定我是不是真的打了它。几秒钟后,您会看到图像或图像通过代理连接可用,例如
我的问题是: - 如何在选择“使用”按钮后立即显示UIActivityIndicatorView?或者,如何通过拦截“使用”按钮回调来插入我自己的代码?我在网上搜索并期望很多人遇到同样的问题,但还没有找到解决方案。
感谢。
答案 0 :(得分:1)
不幸的是,你无法拦截这个电话。我这样说是因为UIImagePickerController中没有委托方法会告诉委托有关按下按钮的推送。既然你不能改变UIImagePickerController中的代码我不认为有任何东西可以做。 Apple用3.1修改了这个,我听说他们在UIImagePickerController上做了一些工作......
答案 1 :(得分:0)
你基本上可以做的是在解雇之前将你的UIActivityInidicati添加到UIImagePicker视图。
在用户按下使用按钮后压缩图像时,我正在做类似的事情。注意NSTimer - 这是让iphone真正显示你要添加的UI的一个很好的技巧: on didFinishPickingImage:
//this will add the UIActivityInidicatior to the picker view
(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo {
showActivity(@"Compressing Image", picker.view);
//this is a hack so the progress label will show up
[NSTimer scheduledTimerWithTimeInterval: 0.0f
target: self
selector: @selector(compress:)
userInfo: image
repeats: NO];
}
//the Compress method
(void) compress:(NSTimer *)inTimer {
NSAutoreleasePool *_pool = [[NSAutoreleasePool alloc] init];
//do some work
[[self getPicker] dismissModalViewControllerAnimated:YES];
//dismiss the view we added to the picker
showActivity(nil, [self getPicker].view);
[_pool release];
}
请注意,我将UIImagePickerController
保留在外面,因此我可以从调用的消息中引用它。
showActivity
是一个简单的方法,可以在给定视图中添加一些UI。
答案 2 :(得分:0)
通过调度队列概念,
当你按下使用按钮时,它将在一个线程中解除pickercontroller并显示活动指示符代码将在另一个线程中运行。在这两者之间,您可以调用自己的方法。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^ {
dispatch_async(dispatch_get_main_queue(), ^{ indicator=[[MBProgressHUD alloc]init]; indicator.labelText=@"Loading"; indicator = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES]; [indicator show:YES]; }); // Put here the code to resize the image [self performSelectorInBackground:@selector(setPath:) withObject:image]; dispatch_async(dispatch_get_main_queue(), ^{ [picker dismissModalViewControllerAnimated:YES]; });
或强>
如果要在uiimagepickercontroller中显示活动指示器,则意味着只需更改此行
indicator=[[MBProgressHUD alloc]init]; indicator.labelText=@"Loading"; indicator = [MBProgressHUD showHUDAddedTo:picker.cameraOverlayView animated:YES]; [indicator show:YES];