неправильная ориентация в viewDidLoad - PullRequest
3 голосов
/ 07 декабря 2011

Итак, у меня есть приложение, которое должно загрузить другое изображение в качестве фонового изображения в зависимости от ориентации устройства. У меня есть следующий код в viewDidLoad:

BOOL isLandScape = UIDeviceOrientationIsLandscape(self.interfaceOrientation);

if (isLandScape)
{
    self.bgImage.image = [UIImage imageNamed:@"login_bg748.png"];        
}

По какой-то причине, даже если симулятор запускается в ландшафте, это bool все еще ложно. Я проверил, и он всегда сообщает, что находится в портретном режиме, независимо от фактической ориентации симулятора. У кого-нибудь есть идеи относительно того, почему это не работает?

В mustAutoRotateForInterfaceOrientation у меня есть следующее:

if (UIDeviceOrientationIsLandscape(interfaceOrientation))
    {
        self.bgImage.image = [UIImage imageNamed:@"login_bg748.png"];
    } else
    {
        self.bgImage.image = [UIImage imageNamed:@"login_bg1004.png"];        
    }

    return YES;

И этот код работает, он просто запутался. После выполнения одного поворота он работает нормально.

Ответы [ 2 ]

7 голосов
/ 07 декабря 2011

Причина в том, что viewDidLoad слишком рано. Каждое приложение запускается в портретной, а затем поворачивается в ландшафт. Когда вызывается viewDidLoad, вращение еще не произошло. Вы хотите использовать замедленную производительность или поставить свои тесты в didRotateFromInterfaceOrientation или аналогичном. Смотрите объяснение в моей книге:

http://www.apeth.com/iOSBook/ch19.html#_rotation

2 голосов
/ 07 декабря 2011

Сначала в функции shouldAutoRotateForInterfaceOrientation вам просто нужно return YES

теперь используйте эту функцию

        -(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
     {

             if  (UIInterfaceOrientationIsLandscape(self.interfaceOrientation))
                {
                         //landscape view login
                 }
             else 
                {
                        //portrait View logic
                 }
     }

А если вы уже находитесь в альбомной или книжной ориентации, то в вашей функции viewDidLoad

        -(void)viewDidLoad
        {
           if  (UIInterfaceOrientationIsLandscape(self.interfaceOrientation))
         {
                 //landscape view code
            } 

         else
         {
              //portrait view code
         }

       }

надеюсь, что это поможет

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