Является ли здесь способ запуска метода при изменении ориентации устройств iOS?
Я хотел бы изменить только некоторые ориентации объектов на экране, а не другие.
Какие делегаты я использую и т.д.
Приветствия -А новичок
Является ли здесь способ запуска метода при изменении ориентации устройств iOS?
Я хотел бы изменить только некоторые ориентации объектов на экране, а не другие.
Какие делегаты я использую и т.д.
Приветствия -А новичок
Зависит от того, когда вы хотите реагировать:
Если перед вращением, переопределить из UIViewController:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
// do something before rotation
}
Если вы хотите выполнить что-то после вращения:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
// do something after rotation
}
Справка:
UIDevice
posts UIDeviceOrientationDidChangeNotification
UIApplication
posts UIApplicationWillChangeStatusBarOrientationNotification
и UIApplicationDidChangeStatusBarOrientationNotification
и имеет связанный обратный вызов делегата для каждого.
UIViewController
получает несколько связанных с ориентацией вызовов, вызванных уведомлением UIDevice, если контроллер представления является частью иерархии контроллера, управляемой окном.
Если вы уже используете UIViewController, выполните некоторые из связанных с ориентацией методов, иначе зарегистрируйтесь для уведомлений UIDevice. Самый важный метод UIViewController - shouldAutorotateToInterfaceOrientation
, потому что если return NO
, другие не вызываются.
willRotateToInterfaceOrientation: это метод, который вы, возможно, смотрите. Прочитайте это.
UIViewController
отправляются willRotateToInterfaceOrientation:duration:
просто перед вращением и didRotateFromInterfaceOrientation:
после вращения.
Чтобы настроить дополнительные анимации, используйте willAnimateRotationToInterfaceOrientation:duration:
или willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:
, didAnimateFirstHalfOfRotationToInterfaceOrientation:
и willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:
. Последние используются для двухступенчатой анимации, которую вы обычно используете, когда у вас есть представления верхнего или нижнего колонтитула, которые перемещаются за кадром для основной анимации перехода.
Моя песочница: https://github.com/comonitos/programatical_device_orientation
Решение легко:
в интерфейсе (h файл):
BOOL rotated;
в реализации (файл m):
переписать
- (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation { возврат повернут; }
2 вызов [самонастройка]
-(void) setup
{
rotated = YES;
[[UIDevice currentDevice] setOrientation:UIDeviceOrientationLandscapeLeft];
rotated = NO;
}
Просто используйте этот фрагмент кода, чтобы проверить изменения ориентации.
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
if UIDevice.currentDevice().orientation.isLandscape.boolValue {
print("Landscape")
} else {
print("Portrait")
}
}