Отключение автоповорота для UIImagePickerController

Я хочу отключить автоповорот UIImagePickerView. Поэтому я использовал следующий код:

UIDevice *currentDevice = [UIDevice currentDevice];


        [parentViewController presentViewController:imagePicker animated:YES completion:nil];

        while ([currentDevice isGeneratingDeviceOrientationNotifications])
            [currentDevice endGeneratingDeviceOrientationNotifications];

Он отключает ImagePickerView, но также отключает вращение корневого представления. Но мне нужна функция автоматического поворота в моем корневом контроллере представления (или я хочу отключить автоматический поворот только в моем ImagePickerController). Для пояснения: перед отключением автоматического поворота UIImagePickerController автоматический поворот был активен в моем корневом представлении.

ОБНОВЛЕНИЯ и ответы::

Я нашел ответ. Напишите следующий код, чтобы включить автоматическое вращение:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

Если у вас есть какая-либо обработка изображений (на самом деле у меня была), вызовите этот метод после выполнения всех задач обработки изображений. В моем случае я вызвал его перед обработкой изображения, и он не включил ориентацию.


person sumon    schedule 23.04.2013    source источник


Ответы (2)


Вот как я сделал. UIImageViewController — это UIViewController, у которого есть метод с именем -(BOOL)shouldAutorotate;

Что мы можем сделать, так это создать подкласс UIImageViewController и перезаписать метод shouldAutorotate. Допустим, имя нашего подкласса — MyImageViewController.

Тогда MyImageViewController.h будет выглядеть так:

#import <UIKit/UIKit.h>

@interface MyImageViewController : UIImagePickerController

@end

И файл MyImageViewController.m должен выглядеть так:

#import "MyImagePickerViewController.h"

@interface MyImagePickerViewController ()

@end

@implementation MyImagePickerViewController

- (void)viewDidLoad {
    [super viewDidLoad];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

-(BOOL)shouldAutorotate{
    return NO;
}
@end

Теперь мы готовы идти! Вместо создания UIImagePickerViewController мы можем создать MyImagePickerViewController в parentViewController, например:

MyImagePickerViewController *imagePicker = [[MyImagePickerViewController alloc] init];
[parentViewController presentViewController:imagePicker animated:YES completion:nil];

Он не будет автоматически поворачиваться, так как для параметра shouldAutoRotate установлено значение NO;

person Natasha    schedule 24.04.2015

Попробуйте это:

@interface UIImagePickerController(addition)

@end
@implementation UIImagePickerController(addition)

-(BOOL)shouldAutorotate{
    return NO;
}

@end
person Ahmad    schedule 22.06.2015