Я не уверен, что это самое элегантное решение, однако мне кажется, что оно работает нормально:
Вы можете встроить представление UIImagePickerController в представление "контейнера" UIViewController.
- (void)showImagePickerForPhotoLibrary {
NSLog(@"Picker");
imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.delegate = self;
imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
UIViewController *containerController = [[UIViewController alloc] init];
containerController.contentSizeForViewInPopover = CGSizeMake(768, 1000);
[containerController.view addSubview:imagePickerController.view];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
Class cls = NSClassFromString(@"UIPopoverController");
if (cls != nil) {
popoverController = [[UIPopoverController alloc] initWithContentViewController:containerController];
[popoverController presentPopoverFromRect:selectedRect inView:self.view permittedArrowDirections:4 animated:YES];
[imagePickerController.view setFrame:containerController.view.frame];
}
}
else {
[app.mainViewController presentModalViewController:containerController animated:YES];
}
}
Надеюсь, это поможет
РЕДАКТИРОВАТЬ: по какой-то странной причине рамка действительно меняется, когда в горизонтальной плоскости вправо.
Чтобы прийти к этому, вам нужно установить кадр вида средства выбора изображения послеВы представляете всплывающее окно.
Я отредактировал код выше, чтобы показать это.
Также, в вашем контроллере, добавьте это:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[imagePickerController.view setFrame:imagePickerController.view.superview.frame];
}