Поворот в горизонтальное положение для представлений, добавленных в иерархию вручную (iPhone)

StackOverflow https://stackoverflow.com/questions/1940912

Вопрос

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

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

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];

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

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

Это было полезно?

Решение

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

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

-(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);
 }

}

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

Алехандра :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top