2014-10-29 2 views
4

Пробовал играть в новые методы ротации, мне нужно знать, вращается ли устройство, чтобы отложить и отменить действие, которое не требуется в случае поворота.viewWillTransitionToSize координатор игнорирует блок

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator 
{ 
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; 

    _rotating = YES; 

    [coordinator notifyWhenInteractionEndsUsingBlock:^(id<UIViewControllerTransitionCoordinatorContext> context) { 
     _rotating = NO; 
    }]; 
} 

Кажется прямолинейным и должно работать на основе моей интерпретации документации, но, по-видимому, нет. Кажется, что _rotating установлен в YES и никогда не возвращается к NO. Следовательно, кажется, что мой блок завершения никогда не называется.

+0

Почему бы не использовать -измененияАвтологическое переключение: завершение:? – Dex

ответ

8

У меня была та же проблема. Я нырнул в документы. Блок указывается в notifyWhenInteractionEndsUsingBlock вызывается, когда:

При переходе изменяется от интерактивных к неинтерактивного затем обработчик вызывается.

Однако поворот не является интерактивным. Как только вы начнете, вы не сможете взаимодействовать с ним. Вот почему обработчик никогда не называется.

Я закончил с использованием animateAlongsideTransition:completion: метода. Отлично работает.

- (void)viewWillTransitionToSize:(CGSize)size 
     withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator 
{ 
    _rotating = YES; 

    [super viewWillTransitionToSize:size 
      withTransitionCoordinator:coordinator]; 

    [coordinator animateAlongsideTransition:nil 
           completion:^(id<UIViewControllerTransitionCoordinatorContext> context) 
    { 
     _rotating = NO; 
    }]; 
} 
+0

Это не имело смысла для меня, отправляя ноль. Теперь, когда вы это объясняете, имеет смысл. По-прежнему кажется, что он работает, но работает. –

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