Вам не нужно «блокировать контроллер UIImagePicker в портретном режиме».Как вы сказали, «когда он переходит в ландшафтный режим, это выглядит странно». На самом деле, я не знаю, почему вы говорите, что это выглядит странно.Но вот мой опыт просмотра UIImagePicker выглядит странно в ландшафтном режиме.То есть: при AViewController в качестве корневого контроллера просмотра.И представление BViewController добавляет подпредставление к представлению AViewController.И presentModalViewController:UIImagePickerController
в BViewController.Представление UIImagePicker будет выглядеть странно в ландшафтном режиме.
Решением этой проблемы является установка UIImagePickerController
в качестве корневого контроллера представления перед presentModelViewController.Исходный код ниже показывает детали:
- (void) onCameraButtonTapped:(UIBarButtonItem *)buttonItem
{
//backupRootController it's use as a backup, it will recover after close the image picker controller.
self.backupRootController = [[UIApplication sharedApplication] keyWindow].rootViewController;
UIImagePickerController * imageController = [[UIImagePickerController alloc] init];
imageController.sourceType = UIImagePickerControllerSourceTypeCamera;
imageController.delegate = self;
....
[[[UIApplication sharedApplication] keyWindow] setRootViewController:imageController];
[self presentModalViewController:imageController animated:YES];
[imageController release];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[[[UIApplication sharedApplication] keyWindow] setRootViewController:self.backupRootController];
....
}
Я надеюсь, что это решение может помочь другому человеку в будущем.- Гоман