Повернуть в альбомную ориентацию для представлений, добавленных в иерархию вручную (iPhone) - PullRequest
0 голосов
/ 21 декабря 2009

У меня есть простой UIViewController, который использует XIB для своего интерфейса.

Как таковой, интерфейс просто содержит UIView, UIActivityIndicator и UILabel. У меня есть ограничения размера в Интерфейсном Разработчике, чтобы держать индикатор активности и метку по центру при вращении представления.

UIViewController установлен для возврата YES для книжной и альбомной ориентаций в методе -shouldAutorotateToInterfaceOrientation:.

Представление добавляется в иерархию представлений вручную, используя

if (!activityOverlay)
    activityOverlay = [[XBActivityOverlayViewController alloc] initWithNibName:@"XBActivityOverlayViewController" bundle:nil message:@"Connecting..."];

[activityOverlay.view setAlpha:0.0f];
[self.window addSubview:activityOverlay.view];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3f];
[activityOverlay.view setAlpha:0.9f];
[UIView commitAnimations];

Проблема, с которой я столкнулся, заключается в том, что если устройство уже находится в альбомной ориентации, и в этот момент представление добавляется в иерархию, оно все еще находится в портретной ориентации и не поворачивается автоматически.

Что мне нужно сделать, чтобы добавить представление в той же ориентации, что и родительское представление?

1 Ответ

1 голос
/ 21 декабря 2009

Я не знаю, является ли это правильным ответом на ваш вопрос, но я надеюсь, что может помочь:

Для меня каждый раз, когда я добавляю / закрываю модальное окно или отображаю новый вид, вызывается следующая функция:

-(void) detectOrientation 
{


 if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) || 
     ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)) 
 {

             item1.frame = CGRectMake(147.0, 241.0, 56.0, 28.0);
     item2.frame = CGRectMake(265.0, 241.0, 56.0, 28.0);

 }
 else if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait) ||
          ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown) || !inLandscapeOrientation)
 {

    item1.frame = CGRectMake(35.0, 425.0, 35.0, 28.0);
item2.frame = CGRectMake(176.0, 425.0, 35.0, 28.0);
 }

}

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

Алехандра:)

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