近期在坐一个ipad项目,只支持横屏,所以适配什么的都不用搞,但是问题来了,当我调UIImagepickcontroller的时候报错了,大概意思是说系统默认的时可以旋转屏幕的,而我的应用只支持横屏,所以崩溃了。怎么办?第一次遇见这样的问题,就纠结了好几天,然后各种上网搜,求大牛帮忙,最后用通知解决了。
废话不多说,但讲一下思路:
就是当我模态UIImagepickcontroller的时候,用一个通知,让应用支持横竖屏,当选完照片或者取消的时候,再发个通知让应用锁定横屏。
代码如下:

#import "AppDelegate.h"
@property NSUInteger MYInterfaceOrientationMask;
@property (nonatomic,strong) UIApplication *app;
//发通知要执行的方法
- (void)changeRotate:(NSNotification *)noti{
    if ([noti.object isEqualToString:@"1"]) {
        _MYInterfaceOrientationMask=UIInterfaceOrientationMaskLandscapeRight;
    }else{
        _MYInterfaceOrientationMask=UIInterfaceOrientationMaskAll;
    }
    [self application:_app supportedInterfaceOrientationsForWindow:_myWindow];
}
#if __IPAD_OS_VERSION_MAX_ALLOWED >= __IPAD_6_0
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    _app=application;
    _myWindow=window;
    return _MYInterfaceOrientationMask;
}
#endif

你调用UIImagepickcontroller的地方发通知

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
    //让屏幕可以旋转
    [[NSNotificationCenter defaultCenter]postNotificationName:@"changeRotate" object:@"0"];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
    //让屏幕旋转失效
    [[NSNotificationCenter defaultCenter]postNotificationName:@"changeRotate" object:@"1"];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
    //让屏幕旋转失效
    [[NSNotificationCenter defaultCenter]postNotificationName:@"changeRotate" object:@"1"];
}

然后完美解决了,其实不算完美,还是有一个问题的,就是在开启横竖屏之后,用户竖屏过来之后,选完照片返回,应用还是会停留在竖屏界面,不过横屏过来之后就ok了!不懂的问我!