2014-10-31 3 views
1

У меня есть приложение для iOS7 с UIViewController, которое должно поддерживать пейзаж влево-вправо, а портрет - портрет вверх ногами и другие ViewControllers должны поддерживать только ориентацию влево и вправо. Я использовал уведомление, чтобы уведомить об изменении ориентации и соответствующим образом обновить соответствующие объекты. Я также проверяю текущую ориентацию UIDevice на поворот. Проблема , с которой я сталкиваюсь, заключается в том, что даже небольшой способ изменения ориентации триггера или наклона, который обновляет представления. Я даже получаю причудливые рамы зрения тогда и там. Я использую beginGeneratingDeviceOrientationNotifications и endGeneratingDeviceOrientationNotifications on viewDidLoad и viewWillDisappear соответственно. Есть ли способ ограничить вращение устройства в одиночку?Направление наклона вверх/вниз и боковые триггеры ориентации уведомления

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceDidRotate:) name:UIDeviceOrientationDidChangeNotification object:nil]; // adding observer to notify when device rotates. 

deviceDidRotate: вызывается даже для небольшого наклона или тряски, которого я на самом деле хочу избежать.

UIDeviceOrientation orientation = [UIDevice currentDevice].orientation; 
     //Ignoring specific orientations 
if (orientation == UIDeviceOrientationFaceUp||orientation == UIDeviceOrientationFaceDown  ||orientation == UIDeviceOrientationUnknown) 
{ 
    return; 
} 
if ((UIDeviceOrientationIsPortrait(orientation) || UIDeviceOrientationIsLandscape(orientation))) { 
      [UIViewController attemptRotationToDeviceOrientation]; 
} 

Чтобы избежать эффекта наклона Я использую этот метод делегата

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    [self handleViewArrangementWithCurrentOrientation]; 
} 

Как я могу пропустить триггер уведомления при малейшем сотрясении или наклоне. У меня на самом деле есть анимация в обновлении вида при изменении ориентации, которая дает мерцающий вид эффекта и его частоту. Мне нужно удалить это. Пожалуйста, помогите парням.

+0

Наклон вверх/вниз - вращение вокруг оси X, а не Z-ось. – trojanfoe

+0

Да, ориентация UIDevice колеблется быстро. Вы не должны использовать его для установки вращения контроллера просмотра. Есть ли причина, по которой вы не можете использовать viewDidRotate в контроллере (-ах) просмотра? Или, еще лучше, используйте автозапуск? –

+0

@AnnaDickinson: Я использую автомат. Это не проблема с макетом. Я получаю мой код для обновления представления, который вызывается даже для небольшого встряхивания/наклона из-за срабатывания уведомления. Что я могу сделать, чтобы этого избежать. Пользователи почувствовали бы это как ошибку. Есть ли другой путь? – Meera

ответ

1

(более полный ответ, чем мой комментарий)

При обращении ротации вида контроллера, вы не можете использовать устройства направления вращения от [UIDevice CurrentDevice] .orientation - что дает вам мгновенную ориентацию из устройство. Он не обязательно соответствует интерфейсу и может быстро и быстро переключаться.

Интерфейс Ориентация обрабатывается цепочкой ответчиков. UIViewControllers получают сообщения, когда они меняются. Эти сообщения возникают, когда ориентация стабилизируется и не будет быстро колебаться.

Для обработки вращения:

  • Во-первых, IOS 8 докторов, смотреть на "Обращение с видом Вращения" в UIViewController

  • Pre-iOS8, переопределить didRotateFromInterfaceOrientation в вашем ViewController. Контроллер вашего вида получает это значение , когда устройство вращается. В то время вы обрабатываете вращение.

  • Начиная с iOS8, используйте механизм Transition Coordinator . Установите координатор перехода, используя свойство transitionCoordinator контроллера вида.

Или вы можете полностью обойтись без поворотов, если вы полностью установили свои ограничения автоопределения. См. (http://annabd351.github.io/SquareCropViewController) для хорошего примера контроллера вида, который обрабатывает некоторые сложные сценарии вращения без кода.

+0

Спасибо, Анна. Я нашел ваш ответ полезным. – Meera

+0

Отлично! Ваше приложение работает сейчас? –

 Смежные вопросы

  • Нет связанных вопросов^_^