UIViewController и Orientation я иду в правильном направлении? - PullRequest
0 голосов
/ 07 февраля 2011

Я провел последние несколько часов, пытаясь заставить это работать, и я не могу, поэтому мне нужно знать, правильно ли то, что я пытаюсь сделать. Это сводит меня с ума!

Моя цель - иметь ViewController, который обнаруживает изменение ориентации. Когда это портрет, он показывает представление с UITableView, когда это пейзаж, он показывает UIView с контентом, который я создам программно.

В моем родительском viewcontroller у меня есть:

- (void)viewDidLoad 
{
    [super viewDidLoad];

TableDataViewController *tableDataController = [[TableDataViewController alloc]  
          initWithNibName:@"TableDataViewController"                                                                                
                   bundle:nil];
self.tableDataViewController = tableDataController;
[self.view insertSubview: tableDataController.view atIndex:0];
[tableDataController release];
}

Это загружает мое представление, содержащее представление таблицы и контроллер, который идет с ним. Затем пользователь поворачивает устройство и функцию:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toOrientation                                                 
duration:(NSTimeInterval)duration
{
if (toOrientation == UIInterfaceOrientationPortrait) {
    NSLog(@"PerformAnalysisViewController: Gone to Potrait");   
} 

if ((toOrientation == UIInterfaceOrientationLandscapeLeft) || 
    (toOrientation == UIInterfaceOrientationLandscapeRight)) {
    NSLog(@"PerformAnalysisViewController: Gone to Landscape");

           // Load new view here
           CGRect frame = [[UIScreen mainScreen] applicationFrame];
       UIView *horizView = [[[HorizView alloc]
                  initWithFrame:frame] autorelease];
       [self setView:horizView];;   
}
}

сработает в зависимости. Однако это не срабатывает? Это потому, что управление перешло к Subview, который я вставил в viewDidLoad? Если так, то как мне вернуть его обратно? Нужно ли заставить его определять ориентацию, а затем удалять себя из суперпредставления?

Если бы это работало тогда, будет ли добавлен новый вид, как у меня выше? Я попытался прочитать документацию Apple, но не могу заставить это работать.

Вся помощь очень ценится.

Mike

1 Ответ

0 голосов
/ 07 февраля 2011

Я использую метод willRotateToInterfaceOrientation для обработки поворота пользовательского интерфейса:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration {
   if( interfaceOrientation == UIInterfaceOrientationPortrait || 
       interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown ) {
      self.backgroundImageView.image = [UIImage imageNamed:@"vertical.png"];
   }
   else {
      self.backgroundImageView.image = [UIImage imageNamed:@"horizontal.png"];
   }

}

Пожалуйста, убедитесь, что ваш Info.plist поддерживает более одной ориентации и что вы реализовали mustAutorotateToInterfaceOrientation: interfaceOrientation, вернув YES.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...