Подтвердить что ты не робот

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

Я хочу программно определить процесс вращения на ipad. В этом случае я хочу установить логическое значение в yes, когда начнется вращение, и установите значение false после окончания вращения. Есть ли какой-либо метод, который вызывается при начале вращения и завершении вращения?

4b9b3361

Ответ 1

Из Apple Docs:

Отправлено диспетчером представлений перед тем, как пользовательский интерфейс начнет вращаться.

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

Отправлено в контроллер вида после поворота пользовательского интерфейса:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

Подробнее здесь: Ссылка на класс UIViewController → Ответ на просмотр событий ротации

ВНИМАНИЕ: Это устарело, см. этот пост

Ответ 2

Для новичков в этом посте методы, предложенные Nekto, стали устаревшими в iOS 8. Apple предлагает использовать:

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator

Вы можете использовать параметр "размер" в качестве простого способа получить переход к портретной или альбомной ориентации.

то есть.

if (size.width > size.height)
{
    // Position elements for Landscape
}
else
{
    // Position elements for Portrait
}

Дополнительная информация доступна в Документах.

Ответ 3

Все приведенные выше методы (в ответе @Nekto) устарели в версиях iOS8.0 и более поздних версий. Источник: Библиотека разработчиков iOS

Начиная с iOS 8, все методы, связанные с ротацией, устарели. Вместо, повороты рассматриваются как изменение размера контроллеров вида и поэтому сообщается с использованием viewWillTransitionToSize: withTransitionCoordinator: метод. Когда изменения ориентации интерфейса, UIKit вызывает этот метод в окнах контроллер корневого представления. Затем этот контроллер просмотра уведомляет о своем ребенке просматривать контроллеры, распространять сообщение по всему виду иерархии контроллера.

В iOS8 или более поздней версии вы можете использовать метод ниже.

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

    [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {

        // Stuff you used to do in willRotateToInterfaceOrientation would go here.
        // If you don't need anything special, you can set this block to nil.

    } completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {

        // Stuff you used to do in didRotateFromInterfaceOrientation would go here.
        // If not needed, set to nil.

    }];
}

Ответ 4

В протоколе UISplitViewController новый метод для iOS8 -

- (void)splitViewController:(UISplitViewController *)svc willChangeToDisplayMode:(UISplitViewControllerDisplayMode)displayMode

Существует четыре режима отображения:

typedef enum UISplitViewControllerDisplayMode : NSInteger {
  UISplitViewControllerDisplayModeAutomatic,
  UISplitViewControllerDisplayModePrimaryHidden,
  UISplitViewControllerDisplayModeAllVisible,
  UISplitViewControllerDisplayModePrimaryOverlay,
} UISplitViewControllerDisplayMode;

НО этот метод будет НИКОГДА не возвращаться автоматически.