UIImagePickerController периодически перестает отвечать после нажатия кнопки «Использовать» - PullRequest
8 голосов
/ 17 марта 2011

У меня есть приложение, которое записывает видео.Приложение представляет собой смесь cocos2d и UIKit, хотя часть, использующая UIImagePickerController, полностью UIKit.

Проблема: После съемки видео при нажатии кнопки «Использовать» кнопка переходит в выбранное состояние, а затемНичего не произошло.Кнопка «Возврат» отключена.Вы по-прежнему можете воспроизводить / приостанавливать видео, но просмотр никогда не прекращается, и - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info никогда не вызывается.

Проблема возникает на длинных и коротких (<5 секунд) видео.Причинение памяти предупреждений не воспроизводит проблему.Изменение аудиосеансов перед запуском средства выбора изображений также не воспроизводило проблему. </p>

Я не смог вызвать проблему.Это случается только изредка.Любые идеи?

Вот код, который представляет UIImagePickerController

  UIImagePickerController *tmpVC = [[UIImagePickerController alloc] init];
  tmpVC.delegate = self;
  tmpVC.allowsEditing = YES;
  // First get the right media types for the right source
  NSArray *types = nil;
  if (useCamera)
  {
    types = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
    tmpVC.sourceType = UIImagePickerControllerSourceTypeCamera;
  }
  else
  {
    types = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    tmpVC.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
  }

  // Then see if "movie" is in there
  for (NSString *mediaType in types)
  {
    if ([mediaType isEqualToString:(NSString*)kUTTypeMovie])
    {
      tmpVC.mediaTypes = [NSArray arrayWithObjects:(NSString*)kUTTypeImage,(NSString*)kUTTypeMovie,nil];
      tmpVC.videoQuality = UIImagePickerControllerQualityTypeHigh;
    }
  }

  // Present the configured controller
  [self presentModalViewController:tmpVC animated:YES];
  [tmpVC release];

Ответы [ 3 ]

1 голос
/ 07 июня 2012

Я бы посмотрел еще где-нибудь в вашем коде, это вызывается в операторе if? Вы выделили и инициировали то, что вызывает - (void) imagePickerController: (UIImagePickerController *) средство выбора didFinishPickingMediaWithInfo: (NSDictionary *) информация. Это всего лишь некоторые мелочи, которые я бы искал, плюс вызов NSLog (), где вы видите вызов функции, чтобы узнать, что она была вызвана, или там может быть ошибка.

1 голос
/ 08 июня 2012

Причиной моей проблемы было то, что в iOS 5

[picker.parentViewController dismissModalViewControllerAnimated:YES]

больше не работает - parentViewController равно нулю. Заблуждение приводит к тому, что представление выбора «завершается», но не закрывается, и оно просто остается неактивным.

Вместо этого вы можете использовать:

[picker.presentingViewController dismissModalViewControllerAnimated:YES]

Но это не работает в iOS 4, так как нет сообщения presentingViewController.

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

[self dismissModalViewControllerAnimated:YES]

В моем селекторе.

1 голос
/ 06 июня 2012

Тестируете ли вы приложение в симуляторе?Попробуйте протестировать его на устройстве и посмотрите, работает ли он так же.Я помню, что у меня была похожая проблема, когда я не мог выбрать видео с помощью средства выбора в симуляторе, поскольку приложение просто «зависло» после нажатия кнопки «Использовать».

...