iOS7 iPad只使用UIImagePickerController横向应用程序
我相信这是一个常见的问题,许多答案不再工作,许多只是部分,如果你是在iOS7下,你的iPad应用程序只是横向,但你想使用UIImagePickerController
与源UIImagePickerControllerSourceTypePhotoLibrary
或UIImagePickerControllerSourceTypeCamera
。
如何设置正确,所以它工作100%? 而且你没有得到混合的方向,并避免错误“支持的方向与应用程序没有共同的方向,并且应该返回YES
”。
如果您的iPad应用仅在所有情况下都是横向的,请执行以下3个步骤:
1)在你的应用程序委托
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { return UIInterfaceOrientationMaskAll; }
2)创build一个类别标题
#import "UIViewController+OrientationFix.h" @implementation UIViewController (OrientationFix) - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { return UIInterfaceOrientationIsLandscape(toInterfaceOrientation); } - (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } @end
3)创build一个类别的实现
#import "UIImagePickerController+OrientationFix.h" @implementation UIImagePickerController (OrientationFix) - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { return UIInterfaceOrientationIsLandscape(toInterfaceOrientation); } - (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } @end
注意:您不需要在任何地方导入这些类别,只要它们与项目一起编译即可
注意:不需要在任何VC中实现这些方法
注意:不需要改变plist支持的方向
这是在任何条件下进行testing和工作
我已经从苹果的示例代码中看到这个代码。
UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; imagePickerController.modalPresentationStyle = UIModalPresentationCurrentContext;
由于这个UIModalPresentationCurrentContext UIImagePickerController
将根据设备的当前方向打开。
苹果的文档说:
“重要:UIImagePickerController类只支持纵向模式。”
虽然,它在全屏和iOS 6上的横向效果很好。
UIImagePickerController类的引用
感谢上面的Peter Lapisubuild议。 它不适合我(也许我在iOS 8.3),但我能够修改它,以解决我的方向问题。 我的代码如下
在应用程序委托
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { return UIInterfaceOrientationMaskAll; }
UIImagePickerController类别
@implement UIImagePickerController (extensions) - (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskAll; } - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return [[UIApplication sharedApplication] statusBarOrientation]; } @end
UIViewController类别
@implementation UIViewController (extensions) - (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskAll; } @end
虽然大多数的答案build议使用.currentContext
,我已经发现了解雇imagepicker后,一切都是错的。
在一个Landscaped iPad上, imho最好是使用.formSheet
:
let picker = UIImagePickerController() picker.modalPresentationStyle = .formSheet picker.sourceType = .photoLibrary picker.delegate = self self.present(picker, animated: true)