заблокировать UIImagePickerController в портретном режиме в приложении ios - PullRequest
5 голосов
/ 20 января 2012

В моем приложении IOS, когда я открываю камеру, я помещаю изображение поверх вида камеры. Хорошо выглядит в портретном режиме. Но когда он переходит в ландшафтный режим, это выглядит странно. Поэтому я хочу заблокировать UIImagePickerController в портретном режиме.

Ниже приведен мой код для контроллера выбора изображений пользовательского интерфейса

UIImagePickerController *imgPkr = [[UIImagePickerController alloc] init];
imgPkr.delegate = self;
imgPkr.sourceType = UIImagePickerControllerSourceTypeCamera;

Как его можно заблокировать в портретном режиме ....

Ответы [ 8 ]

3 голосов
/ 26 ноября 2013

Или, вы можете создать подкласс UIImagePickerController:

Создайте новый класс UIImagePickerController и просто добавьте в него эти строки.

- (BOOL)shouldAutorotate{
return NO;
}

Импортируйте его в класс, который использует камеру, и вместо того, чтобы использовать UIImagePickerController по умолчанию, используйте созданный вами класс.

Ваша камера должна перестать автоматически вращаться.

2 голосов
/ 21 марта 2013

Единственное решение, которое сработало для меня, это категория, но мне пришлось добавить и другой метод:

#import "UIImagePickerController+NoRotate.h"

@implementation UIImagePickerController (NoRotate)

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

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}
@end

Ура! * * 1004

2 голосов
/ 23 апреля 2012

Это не лучшее решение, но оно работает:

AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
[appDelegate.window addSubview:cameraOverlay];
imgPicker.cameraOverlayView = appDelegate.window.superview;

Камера на заднем плане все еще вращается, но наложение не отображается. Надеюсь, что это работает для вас

1 голос
/ 11 июля 2012

Вам не нужно «блокировать контроллер UIImagePicker в портретном режиме».Как вы сказали, «когда он переходит в ландшафтный режим, это выглядит странно». На самом деле, я не знаю, почему вы говорите, что это выглядит странно.Но вот мой опыт просмотра UIImagePicker выглядит странно в ландшафтном режиме.То есть: при AViewController в качестве корневого контроллера просмотра.И представление BViewController добавляет подпредставление к представлению AViewController.И presentModalViewController:UIImagePickerController в BViewController.Представление UIImagePicker будет выглядеть странно в ландшафтном режиме.

Решением этой проблемы является установка UIImagePickerController в качестве корневого контроллера представления перед presentModelViewController.Исходный код ниже показывает детали:

- (void) onCameraButtonTapped:(UIBarButtonItem *)buttonItem
{   
    //backupRootController it's use as a backup, it will recover after close the image picker controller.
    self.backupRootController = [[UIApplication sharedApplication] keyWindow].rootViewController;

    UIImagePickerController * imageController = [[UIImagePickerController alloc] init];
    imageController.sourceType = UIImagePickerControllerSourceTypeCamera;
    imageController.delegate = self;
    ....
    [[[UIApplication sharedApplication] keyWindow] setRootViewController:imageController];
    [self presentModalViewController:imageController animated:YES];
    [imageController release];
}


- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    [[[UIApplication sharedApplication] keyWindow]  setRootViewController:self.backupRootController];
    ....
}

Я надеюсь, что это решение может помочь другому человеку в будущем.- Гоман

0 голосов
/ 31 июля 2014

нет необходимости создавать подкласс, просто создайте категорию для uiimagepickercontroller и поместите эту строку на него - (BOOL) shouldAutorotate { возврат НЕТ; }

0 голосов
/ 09 октября 2013
-(BOOL)shouldAutorotate {
return NO;}

Попробуйте это в вашем контроллере представления.Это сработало для меня.Примечание: это для ios6.0 и выше

0 голосов
/ 20 января 2012

Добавьте категорию на UIImagePickerController и переопределите метод shouldAutoRotateToInterfaceOrientation следующим образом:

@implementation UIImagePickerController (NoRotate)

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

@end
0 голосов
/ 20 января 2012

Просто напишите этот код в вашем контроллере вида

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations.
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
...