Поворот в горизонтальное положение для представлений, добавленных в иерархию вручную (iPhone)
-
20-09-2019 - |
Вопрос
У меня есть простой 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);
}
}
Здесь я меняю положение в соответствии с текущей ориентацией устройства.Возможно, если вы обнаружите, что текущая ориентация — альбомная, вы добавите подпредставление с такой ориентацией.
Алехандра :)