границы] не меняется при движении ландшафта - PullRequest
2 голосов
/ 15 февраля 2011

Я написал приложение, в котором есть UIViewController, который отображает другой UIViewController в портретном режиме и другой UIViewController в альбомной ориентации.

Когда я пойду в пейзаж, я буду рисовать / размещать вещи, поэтому мне нужно получить координаты ландшафта. Ниже приведен код, который запускает новое представление при вращении iPhone. Код ниже показывает, как загружается это представление.

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)x
  duration:(NSTimeInterval)duration
{
if (UIInterfaceOrientationIsPortrait(x)) 
{
    NSLog(@"Going Portrait");

} else if (UIInterfaceOrientationIsLandscape(x)) 
{
    NSLog(@"Going Landscape");
    if (activeView != [graphViewController view]) 
    {
        [containerView addSubview:[graphViewController view]];  
    }
}
}

Моя проблема в том, что когда

-(void)loadView {
CGRect screenBounds = [[UIScreen mainScreen] bounds];
NSLog(@"GraphViewController: Screenbounds %@", NSStringFromCGRect(screenBounds));
}

в GraphViewController возвращает, он создает: GraphViewController: Screenbounds {{0, 0}, {320, 480}}

, который не совпадает с ландшафтом, и поэтому мой рисунок неверен. Как мне сделать так, чтобы GraphViewController имел правильные координаты, когда он вызывает [UIScreen mainScreen] bounds]; ?

Большое спасибо

Mike

1 Ответ

1 голос
/ 15 февраля 2011

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

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation

методы как в вашем главном viewcontroller, так и в графическом контроллере.

Однако я не думаю, что это хороший путь, чтобы идти вниз. Есть ли конкретная причина, по которой вы используете контроллеры uiview вместо просто uiviews для отображения различных интерфейсов?

Если вы можете перейти на прямой UIViews, а затем просто сделать что-то вроде

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)x
  duration:(NSTimeInterval)duration
{
   if (UIInterfaceOrientationIsPortrait(x)) 
   {
       NSLog(@"Going Portrait");

   } 
   else if (UIInterfaceOrientationIsLandscape(x)) 
   {
       NSLog(@"Going Landscape");
       if (activeView != graphView) 
       {
           containerView = graphView;
           //OR
           [containerView addSubview:graphView];
       }
   }
}

Я думаю, что в конечном итоге вам будет лучше, но ваш выбор.

...