3 回答
TA贡献1785条经验 获得超8个赞
拍摄后我不想旋转图像;我想让预览在横向模式下正确显示。因此,在iOS 6中,我允许在应用程序级别使用纵向模式,但是将应用程序的根视图控制器设置为class MyNonrotatingNavigationController,其定义如下:
@implementation MyNonrotatingNavigationController
-(NSUInteger) supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscape;
}
@end
因此,此导航控制器内显示的所有内容都将沿横向显示(您可以使用任何视图控制器来执行此操作)。现在,当我需要显示图像选择器时,我用支持纵向模式的通用控制器替换了应用程序窗口的根视图控制器。为了防止老根视图控制器,并从取消分配自己的观点,我保持指向他们,直到我准备把它们放回应用程序窗口。
#define APP_DELEGATE ((MyAppDelegate*)[[UIApplication sharedApplication] delegate])
static UIViewController *pickerContainer = nil;
static UIViewController *oldRoot = nil;
static UIView *holdView = nil;
-(void) showPicker
{
...create UIImagePickerController...
oldRoot = APP_DELEGATE.window.rootViewController;
holdView = [[UIView alloc] initWithFrame:APP_DELEGATE.window.bounds];
[holdView addSubview:oldRoot.view];
pickerContainer = [UIViewController new];
pickerContainer.view = [[UIView alloc] initWithFrame:APP_DELEGATE.window.bounds];
APP_DELEGATE.window.rootViewController = pickerContainer;
[pickerContainer presentViewController:picker animated:YES completion:NULL];
}
-(void) imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info
{
[pickerContainer dismissViewControllerAnimated:YES completion:^{
dispatch_async( dispatch_get_main_queue(), ^{
APP_DELEGATE.window.rootViewController = oldRoot;
[APP_DELEGATE.window addSubview:oldRoot.view];
pickerContainer = nil;
oldRoot = nil;
holdView = nil;
});
}];
}
有点痛苦,但它确实适用于照片和视频。图像选择器的控件以纵向模式显示,但应用程序的其余部分仅横向显示。
TA贡献1790条经验 获得超9个赞
我通过使UIImagePickerController
屏幕以全屏模式显示来解决了此问题,这也是Apple建议在iPad上使用的模式。
从UIImagePickerController
文档:
在iPad上,如果您指定UIImagePickerControllerSourceTypeCamera的源类型,则可以模式(全屏)或使用弹出窗口来呈现图像选择器。但是,Apple建议您仅全屏显示相机界面。
- 3 回答
- 0 关注
- 659 浏览
添加回答
举报