Какая точка зрения iOS 6 - (BOOL) должна быть активирована?

Насколько я знаю, правильная практика iOS 6 заключается в написании кода, подобного этому, для обработки авторотации:

// iOS 6
- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}

Вместо записи

// pre-iOS 6 support
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    BOOL retVal = UIInterfaceOrientationIsLandscape(toInterfaceOrientation);
    return retVal;
}

Честно говоря, я думаю, что pre-iOS 6 гораздо яснее: я не понимаю, что у меня есть два метода обработки авторотации, особенно потому, что я видел -(BOOL) shouldAutorotate возвращение YES во всех примеры. Я что-то пропустил?

Ответ 1

Новый API позволяет сохранить вызов для получения текущей ориентации устройства: два вопроса, а именно

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

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

Так как iOS делает вызов в ваше приложение shouldAutorotate в ответ на событие от акселерометра, он уже знает новую ориентацию; если ваше приложение ответит "ДА", iOS может проверить текущую ориентацию на список поддерживаемых, и придумать решение без вашего приложения, запрашивающего текущую ориентацию.

В маловероятном случае, когда ваше приложение должно принять решение о автоматическом ротации на основе новой ориентации, новый API не хуже старого, поэтому это ситуация с выигрышем.