Мой модальный вид не вращается - PullRequest
0 голосов
/ 01 марта 2012

Я сталкиваюсь с проблемой отображения модального вида.Мой первый взгляд вращается очень хорошо.Контроллер модального представления реализует метод "ShouldAutorotationToInterfaceRotation", но когда я вращаю устройство или симулятор, модальное представление не вращается.

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

У вас есть подсказка?

1 Ответ

1 голос
/ 20 июля 2012

Вам нужно будет подписаться на NSNotificationCenter, чтобы получать события ротации для вашего модального представления. Затем, если вы хотите, чтобы модальный вид был правильно ориентирован относительно нижнего вида, одним из решений было бы преобразование вида. Вот одна из реализаций:

Поместите это в viewDidLoad и сохраните исходную ориентацию как угол:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:)
                                             name:UIDeviceOrientationDidChangeNotification object:nil];

int initialOrientation = [[UIApplication sharedApplication] statusBarOrientation];
if (initialOrientation == UIDeviceOrientationPortrait)
    initialAngle = 0.0;
else if (initialOrientation == UIDeviceOrientationLandscapeRight)
    initialAngle = 90.0;
else if (initialOrientation == UIDeviceOrientationPortraitUpsideDown)
    initialAngle = 180.0;
else if (initialOrientation == UIDeviceOrientationLandscapeLeft)
    initialAngle = 270.0;

currentAngle = initialAngle;

Затем определите функцию directionChanged: (NSNotification *) уведомление с кодом для правильного поворота относительно начальной ориентации:

int newOrientation = [[notification object] orientation];
if (newOrientation == UIDeviceOrientationPortrait)
    desiredAngle = 0.0;
else if (newOrientation == UIDeviceOrientationLandscapeRight)
    desiredAngle = 90.0;
else if (newOrientation == UIDeviceOrientationPortraitUpsideDown)
    desiredAngle = 180.0;
else if (newOrientation == UIDeviceOrientationLandscapeLeft)
    desiredAngle = 270.0;

if(desiredAngle != currentAngle)
{
    CGAffineTransform rotate = CGAffineTransformMakeRotation(M_PI * (-desiredAngle+initialAngle) / 180.0);    
    CGAffineTransform translate = CGAffineTransformMakeTranslation(0, 0);
    [[self releaseView] setTransform:CGAffineTransformConcat(translate, rotate)];
}
currentAngle = desiredAngle;
...