Сохранение элементов управления в ландшафтном режиме, но позволяющий uitabbar переключаться - PullRequest
3 голосов
/ 28 апреля 2011

У меня UITabBar переключает места, когда iphone меняет ориентацию, и это прекрасно работает, но я хочу, чтобы элементы управления в представлении первой вкладки оставались статичными независимо от положения телефона.Я чувствую, что упускаю что-то очевидное?

Редактировать: В основном, элементы управления всегда горизонтальные, но панель вкладок должна менять ориентацию.Это возможно?

Ответы [ 3 ]

1 голос
/ 01 мая 2011

Для представления, в котором вы не хотите перенастраивать элементы управления, отключите автоматическое изменение размера: [self.view setAutoresizesSubviews:NO];.Это предотвратит реакцию всех элементов управления (подпредставлений) на изменения ориентации интерфейса, но вкладка все равно будет реагировать.Вам также может потребоваться установить autoresizingMask текущего представления: [self.view setAutoresizingMask:UIViewAutoresizingNone];

Добавление: попробуйте следующее для всех элементов управления, которые вы не хотите вращать

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
   switch (toInterfaceOrientation) {
      case UIInterfaceOrientationLandscapeLeft:
         label.transform = CGAffineTransformMakeRotation(M_PI_2); // 90 degress
         break;
      case UIInterfaceOrientationLandscapeRight:
         label.transform = CGAffineTransformMakeRotation(M_PI + M_PI_2); // 270 degrees
         break;
      case UIInterfaceOrientationPortraitUpsideDown:
         label.transform = CGAffineTransformMakeRotation(M_PI); // 180 degrees
         break;
      default:
         label.transform = CGAffineTransformMakeRotation(0.0);
         break;
   }
}
0 голосов
/ 01 мая 2011

К сожалению, это не совсем просто.Вы не можете заставить UITabBarController реагировать на изменения интерфейса, в то время как контроллер представления контента не отвечает.

Но есть способ сделать это.В контроллере представления содержимого willAnimateRotationToInterfaceOrientation:duration: вы можете применить противоположное вращение (используя свойство transform) к подпредставлениям, которые вы не хотите поворачивать.Например, UIInterfaceOrientationLandscapeLeft - это поворот на 90 ° по часовой стрелке, поэтому, если вы примените поворот на 90 ° против часовой стрелки к transform, он будет казаться не повернутым.

Если вы хотите, вы можете включить весь интерфейсконтроллера представления контента в UIView, так что вам просто нужно противопоставить (и, возможно, изменить размер) этого одного представления.Я не знаю, будет ли работать применение противовращения к основному виду контроллера представления, система может отменить ваши настройки для этого конкретного представления.

0 голосов
/ 28 апреля 2011

пример ландшафта

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

ИЛИ

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationLandscape);
}
...