点击“使用”按钮后,UIImagePickerController会间歇性地停止响应

时间:2011-03-17 20:13:02

标签: iphone objective-c uiimagepickercontroller

我有一个录制视频的应用。该应用程序是cocos2d和UIKit的混合,虽然使用UIImagePickerController的部分都是UIKit。

问题: 拍摄视频后,点击“使用”按钮时,按钮会变为选中状态,然后没有任何反应。 “重新启动”按钮被禁用。您仍然可以播放/暂停视频,但视图永远不会被忽略,并且永远不会调用- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

问题发生在长短视频(< 5秒)上。导致内存警告无法重现该问题。在启动图像选择器之前更改音频会话也不会重现该问题。

我无法解决问题。它偶尔会发生。有什么想法吗?

以下是呈现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 个答案:

答案 0 :(得分:1)

您是否在模拟器中测试应用程序?尝试在设备上测试它,看它是否也一样。我记得我有一个类似的问题,我无法在模拟器中选择带有选择器的视频,因为在按下“使用”按钮后应用程序将“卡住”。

答案 1 :(得分:1)

我会在代码中查找其他位置,是否在if语句中调用?你分配并初始化调用 - (void)imagePickerController的东西:(UIImagePickerController *)选择器didFinishPickingMediaWithInfo:(NSDictionary *)info。这些只是我要寻找的一些小东西,再加上一个NSLog(),你可以看到调用函数知道它已被调用,或者那里可能有错误。

答案 2 :(得分:1)

我的问题的原因是在iOS 5中,

[picker.parentViewController dismissModalViewControllerAnimated:YES]

不再有效 - parentViewController为零。令人困惑的是,这会导致选择器视图“完成”但不会被解除,并且它只是保持不活动状态。

相反,您可以使用:

[picker.presentingViewController dismissModalViewControllerAnimated:YES]

但这在iOS 4中不起作用,因为没有presentingViewController消息。

您可以编写一个自动选择正确类别的类别,也可以保持对手动显示的视图控制器的引用。例如,在我的情况下,委托也是呈现它的视图控制器,所以我能够做到

[self dismissModalViewControllerAnimated:YES]

在我的选择器中。