Application is enabled only to Portrait, but UIImagePickerController rotates in iOS6

丶灬走出姿态 提交于 2019-12-12 10:44:06

问题


Please note that the answer below - do not work for iOS6 so I still need an answer!

My application is enabled only for Portrait mode.

However, if I embed a UIImagePickerController inside as a subview, and rotate the device, the top and bottom bar stays in the same location, however UIImagePickerController does rotate.

How can I prevent it from rotating?

This is the code:

    [self.view.window addSubview:self.imagePickerController.view];
    self.imagePickerController.showsCameraControls = NO; 
    self.imagePickerController.view.frame = CGRectMake(0, 90, 320, 320);
    self.imagePickerController.allowsEditing = NO;

EDITED

I am using iOS6 where shouldAutorotate is not being calle


回答1:


Add this UIImagePickerController category in your class,

@interface UIImagePickerController(Nonrotating)
- (BOOL)shouldAutorotate;
@end

@implementation UIImagePickerController(Nonrotating)

- (BOOL)shouldAutorotate {

  return NO;
}

@end



回答2:


include the following in your controller this will work, I'm just creating the category of UIImagePickerController

@interface UIImagePickerController (private)

- (BOOL)shouldAutorotate;
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation;
- (NSUInteger)supportedInterfaceOrientations;
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;

@end


@implementation UIImagePickerController (Private)

- (NSUInteger)supportedInterfaceOrientations {

    return UIInterfaceOrientationMaskPortrait;
}

- (BOOL)shouldAutorotate {

    return UIInterfaceOrientationMaskPortrait;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationPortrait;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{  
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
@end



回答3:


One possibility is to override the

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation;

method of UIImagePickerController. I'm not sure if this is the best possibility but it will work.

So if you only want your UIImagePickerController to be rotated to portrait use the following code

@interface PortraitUIImagePickerController : UIImagePickerController

@end

And the implementation should look like the following

@implementation PortraitUIImagePickerController

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    return UIInterfaceOrientationIsPortrait(toInterfaceOrientation);
}

@end



回答4:


The category in the most voted answer works, but since it is discouraged to use categories, you can also make a subclass of UIImagePickerController and use that.

If you want to avoid rotating of the UIImagePickerController add the following class

UINonRotatableImagePickerController.h

@interface UINonRotatableImagePickerController : UIImagePickerController

@end

UINonRotatableImagePickerController.m

@implementation UINonRotatableImagePickerController

- (BOOL)shouldAutorotate
{
    return NO;
}

@end

You have to change the UIImagePicker class in the storyboard to use UILandscapeImagePickerController, or if you allocate it in code, change

UIImagePickerController *picker = [[UIImagePickerController alloc] init];

to

UIImagePickerController *picker = [[UINonRotatableImagePickerController alloc] init];

and include UINonRotatableImagePickerController.h in your code.



来源:https://stackoverflow.com/questions/14437124/application-is-enabled-only-to-portrait-but-uiimagepickercontroller-rotates-in

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!