iPhone UIImagePickerController проблема: хотите показать UIActivityIndicatorView после нажатия кнопки «Использовать» - PullRequest
1 голос
/ 19 августа 2009

Когда Apple представила версию 3.0 ОС iPhone, UIImagePickerController изменился незначительно: он больше не отображает индикатор активности или прогресса после того, как пользователь подтвердил недавно сделанную фотографию. В двух словах, вы сейчас - сфотографировать, - решить, что все в порядке и - нажмите кнопку «Использовать» и подождите. Нет никаких указаний относительно того, действительно ли вы нажали кнопку «Использовать» или нет. Часто я ударил его несколько раз, так как не уверен, ударил я его или нет. Через несколько секунд вы увидите изображение или изображение станет доступным через соединения делегатов, например,

  • (void) imagePickerController: (UIImagePickerController *) средство выбора didFinishPickingMediaWithInfo: (NSDictionary *) информация

Мой вопрос такой: - Как отобразить UIActivityIndicatorView сразу после нажатия кнопки «Использовать»? Или, как мне вставить свой собственный код, перехватив обратный вызов кнопки «Использовать»? Я искал в Интернете и ожидал, что у многих людей будет такая же проблема, но пока не нашел решения.

Спасибо.

Ответы [ 3 ]

1 голос
/ 19 августа 2009

К сожалению, вы не можете перехватить этот вызов. Я говорю это потому, что в UIImagePickerController нет метода делегата, который бы сообщал делегату о нажатии кнопки «Использовать». Поскольку вы не можете изменить код в UIImagePickerController, я не думаю, что можно что-то сделать. Apple, мог бы улучшить это с 3.1, я слышал, что они сделали некоторую работу над UIImagePickerController ...

0 голосов
/ 16 марта 2013

Через концепцию очереди отправки,

когда вы нажимаете кнопку использования, он отключает контроллер выбора в одном потоке, а показ кода активности будет выполняться в другом потоке. В промежутке вы можете вызвать свой собственный метод.

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];

});

OR

если вы хотите отобразить индикатор активности в uiimagepickercontroller, просто измените эту строку

  indicator=[[MBProgressHUD alloc]init];
  indicator.labelText=@"Loading";
  indicator = [MBProgressHUD showHUDAddedTo:picker.cameraOverlayView animated:YES];
  [indicator show:YES];
0 голосов
/ 04 октября 2009

Что вы можете сделать, так это добавить свой UIActivityInidicatior в представление UIImagePicker, прежде чем отклонить его.

Вот аналогичная вещь, которую я делаю, когда сжимаю изображение после того, как пользователь нажал кнопку использования. Обратите внимание на NSTimer - это хитрый трюк, чтобы заставить iphone действительно отображать добавляемый вами интерфейс: на 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 - это простой метод, который добавляет некоторый интерфейс к данному представлению.

...