Ответ 1
Внедрите в свою реализацию следующее:
- (NSUInteger) supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
Это даст вам результаты, которые вы ищете!
Итак, я хочу заблокировать ориентацию моей домашней страницы на портретную и домашнюю страницу.
Я использую контроллер панели вкладок, поэтому исходным видом является контроллер табуляции, но первый контроллер представления, который появляется первым, является первой вкладкой, например. Главная страница.
Я хотел бы сделать так, чтобы, когда пользователь поворачивает устройство, он не будет вращаться в альбомной ориентации на этой странице. Однако все другие страницы могут вращаться.
Я искал вокруг, и ничто не кажется специфичным для iOS 7, и тот, который специфичен для iOS 7, не работает...
Пожалуйста, помогите, спасибо!
На приведенном ниже рисунке описывается, что я должен сделать DON "T" для этой страницы.
Внедрите в свою реализацию следующее:
- (NSUInteger) supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
Это даст вам результаты, которые вы ищете!
Используйте этот код
@implementation UINavigationController (Rotation_IOS6)
-(BOOL)shouldAutorotate
{
return UIInterfaceOrientationMaskPortrait;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationPortrait;
}
@end
Проблема заключается в том, что, как вы правильно указали, ваша домашняя вкладка не является самым верхним контроллером представления.
Из моих ограниченных знаний по этому вопросу я могу только подумать о следующем:
shouldAutorotate
и supportedInterfaceOrientations
;Думаю, я нашел хорошее решение. Ну, в моем случае я использую UISplitViewController как rootController в раскадровке, но идея такая же.
Реализовать shouldAutorotate() в представлении, которое вы хотите заблокировать вращение
class MyUISplitViewController: UISplitViewController {
override func shouldAutorotate() -> Bool {
if ((self.viewControllers.last) != nil && (self.viewControllers.last!.topViewController) != nil){
if (self.viewControllers.last!.topViewController!.respondsToSelector("shouldAutorotate"))
{
return self.viewControllers.last!.topViewController!.shouldAutorotate()
}
}
return true
}
}
В вашем суб UIViewController
override func shouldAutorotate() -> Bool {
if (UIDevice.currentDevice().userInterfaceIdiom == .Phone)
{
return false
}else{
return true
}
}
Если вы хотите проверить поддерживаемые ориентации, вы можете просто сделать то же самое с supportedsupportedInterfaceOrientations()
ИЗМЕНИТЬ:
Не забудьте указать свой класс "MyUISplitViewController" в корневом режиме просмотра раскадровки