Как определить поворот устройства ПОСЛЕ изменения в последних iOS версиях с Obj- C - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть встроенный веб-контроллер в приложении только для iPad, которому необходимо обновить веб-страницу ПОСЛЕ того, как устройство повернулось, чтобы получить правильный размер области просмотра. В настоящее время я использую устаревший метод:

didRotateFromInterfaceOrientation:

В документации Apple говорится, что нужно использовать более новую версию:

viewWillTransitionToSize:withTransitionCoordinator: 

Я вижу много похожих вопросов по SO, и все они указывают на этот более новый метод .

К сожалению, этот новый метод происходит ДО того, как устройство вращается. Мне нужно знать, когда происходит поворот устройства ПОСЛЕ оно вращается. Если я использую новый метод, веб-страница обновляется до того, как произойдет изменение ориентации, и размер веб-страницы становится все шатким.

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

Как я могу сделать это без старого устаревшего метода?

Приветствия! TJ

Ответы [ 2 ]

1 голос
/ 10 февраля 2020

Используйте coordinator для "анимации" вращения и прослушивания обратного вызова completion. Вы можете указать nil в качестве пользовательского параметра анимации:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    coordinator.animate(alongsideTransition: nil) { _ in
        print("Rotation finished")
    }
}

Код должен быть самоопределяемым.

Редактировать (Obj C):

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
    [coordinator animateAlongsideTransition:nil completion:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {
        NSLog(@"Rotation finished");
    }];
}
0 голосов
/ 10 февраля 2020

Вы можете сделать это в viewDidLayoutSubviews. Но этот метод может вызываться много раз в жизненном цикле представления. Вы можете иметь переменную viewWidth, которая имеет текущую ширину представления. Если в viewDidlayoutSubviews есть изменение ширины представления, можно сделать вывод, что в макете есть изменение, и вам необходимо перезагрузить представление.

-(void) viewDidLayoutSubviews
{
     [super viewDidLayoutSubviews];


    if (viewWidth == 0)
    {
        viewWidth = self.view.bounds.size.width; // First time assign
        return;
    }

  if (viewWidth != self.view.bounds.size.width)
  {
    viewWidth = self.view.bounds.size.width; 
    // perform ur reload operation here.
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...