Я хочу программно определить процесс вращения на ipad. В этом случае я хочу установить логическое значение в yes, когда начнется вращение, и установите значение false после окончания вращения. Есть ли какой-либо метод, который вызывается при начале вращения и завершении вращения?
Какой метод будет вызываться, когда мы начнем вращать устройство и после его завершения
Ответ 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;
НО этот метод будет НИКОГДА не возвращаться автоматически.