Автоповорот в iOS 6.1 для пользовательского вида камеры

Я прочитал здесь почти все сообщения о моей проблеме, но ни одно из решений, похоже, не работает в моем приложении.

Итак, я использую пользовательский вид камеры (с кнопками на панели инструментов и наложением), который представлен модально из контроллера представления. Мое приложение поддерживает альбомную ориентацию только влево и вправо. И я хочу, чтобы вид камеры не автоматически поворачивался, когда он отображается. Я поместил все методы, необходимые для авторотации, в свой контроллер представления и делегат приложения. Я также проверил свой файл plist, и поддерживаемые повороты верны. Но мой вид с камеры продолжает вращаться в любом направлении (книжном и альбомном), когда я поворачиваю устройство, в результате чего наложение и панель инструментов располагаются неправильно. Я также не могу проверить ориентацию вида камеры, потому что я пытался поместить NSLog в метод shouldAutoRotate, но он вообще не вызывается.

Итак, как я могу проверить вращение на моем пользовательском виде камеры? И как заставить его не вращаться и оставаться на месте?

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

Спасибо. Ваше здоровье.


person tyegah123    schedule 08.05.2013    source источник
comment
В вашем проекте есть навигационный контроллер?   -  person Augustine P A    schedule 08.05.2013
comment
Да, я использую навигационный контроллер   -  person tyegah123    schedule 08.05.2013
comment
Ладно, думаю, пока единственный обходной путь, который я могу сделать, это заблокировать автоповорот с помощью кнопки на самом iPad.   -  person tyegah123    schedule 08.05.2013
comment
какая у вас целевая версия iOS?   -  person Augustine P A    schedule 08.05.2013
comment
Возможно, вам нужно больше контроля. Попробуйте образец AVCam от Apple: developer.apple.com/library/ios/#samplecode/AVCam/Introduction/   -  person magma    schedule 08.05.2013


Ответы (3)


Создайте новый класс «UIImagePickerController» и реализуйте делегаты поворота в файле .m, как указано,

// For lower iOS versions
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation  {

return ((toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) || ((toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)));
}

// For iOS version 6.0 and above
- (BOOL)shouldAutorotate {

return YES;
}


- (NSUInteger)supportedInterfaceOrientations {

return (UIInterfaceOrientationMaskLandscape);
}

И создайте экземпляр, скажем, MyImagePickerController вместо UIImagePickerController, и представьте его. Это сработает :)

person Augustine P A    schedule 08.05.2013
comment
Спасибо за ваш ответ. Сейчас попробую и дам знать, если получится :) - person tyegah123; 08.05.2013
comment
Мужик, большое спасибо. Это работает хорошо. Ваш ответ уже принят. :) - person tyegah123; 08.05.2013

Создайте категорию для UINavigationController.

@interface UINavigationController(autoRotation)

-(BOOL)shouldAutoRotate;

@end

@implementation UINavigationController

-(BOOL)shouldAutoRotate{

  return [[self.viewControllers lastobject] shouldAutoRoatate];

}

-(NSUInteger)supportedInterfaceOrientations {

  return [[self.viewControllers lastobject] supportedInterfaceOrientations];

}

@end

Реализуйте эти два метода в соответствующих контроллерах представления и верните ориентацию, которую вы точно хотите....

person jailani    schedule 08.05.2013
comment
Спасибо за ответ. Но я уже пробовал и этот метод. Не дал мне желаемого результата. Но, возможно, я что-то упустил. Так что, может быть, я попробую больше возиться с этим методом. - person tyegah123; 08.05.2013
comment
Как вы приносите свой вид с камеры? используя PresentModalViewController? Если да, то ваш UIImagePickerViewController не существует в вашем стеке навигации. Итак, вам нужно создать категорию для вашего IMagePickerViewController и вызвать shouldAutoRotae... - person jailani; 08.05.2013
comment
Да, я использую PresentModalViewController. Можете ли вы дать мне пример кода для создания категории? Я обязательно попробую, потому что, похоже, это так. - person tyegah123; 08.05.2013

xcode -> файл -> новый файл выберите cocotouch в левой панели выберите категорию target-c -> затем выберите категорию имени Picker в UIImagePickerController из раскрывающегося списка

импорт

@interface UIImagePickerController (сборщик)

-(BOOL) должен AutoRotate; -(NSUInteger)supportedInterfaceOrientations;

@конец

импортировать "UIImagePickerController+picker.h"

@implementation UIImagePickerController (сборщик)

-(BOOL) долженАвтоповорот {

    return yourOrientation;

}

-(NSUInteger)supportedInterfaceOrientations {

    return yourInteger;

}

@конец

После этого, когда ориентация вашего устройства изменилась, метод должен AutoRotate вызываться из вашей категории UINavigationController, в это время вам нужно выяснить, представлен ли вид с камеры, если да, то вам нужно вызвать shouldAutoRotate из Picker

См. следующий код

в вашем контроллере представления shouldAutoRotate

-(BOOL) долженАвтоповорот {

   if([self presentingViewController])// Camera is present 
         return [instanceOfUIImagePickerController shouldAutoRotate];
   return yourOrientaionNeededForThisVC;

}

person jailani    schedule 08.05.2013