2013-09-24 1 views
0

новый разработчик iOS здесь. У меня есть несколько видов, которые требуют отображения разных изображений в портретной и альбомной ориентации. В настоящее время я успешно реализовал это, и портретное изображение загрузилось нормально, и после поворота изображение пейзажа также загружается отлично. Однако, если устройство находится в альбомной ориентации затем переключается на другой точке зрения, он загружает неправильно - неправильный размер, разрешение, выравнивание и т.д. Мой код для работы с ориентацией изменения ниже:Пейзажные пейзажи только правильно загружаются с портрета и после поворота, почему?

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
    { 
     if((self.interfaceOrientation == UIDeviceOrientationLandscapeLeft) || (self.interfaceOrientation == UIDeviceOrientationLandscapeRight)) 
     { 
      _image1.image = [UIImage imageNamed:@"Landscape.png"]; 
     } 
     else if((self.interfaceOrientation == UIDeviceOrientationPortrait) || (self.interfaceOrientation == UIDeviceOrientationPortraitUpsideDown)) 
     { 
      _image1.image = [UIImage imageNamed:@"Portrait.png"]; 
     } 
} 

Я считаю, что это происходит потому, что метод вызван только вращением. Например, если я поворачиваю неправильный, начальный ландшафтный вид, он снова отображает правильные изображения. Есть ли способ заставить метод запускать и загружать правильный ландшафтный вид, когда первоначальная ориентация находится в ландшафте? Или способ принудительного отображения правильного изображения? Большое спасибо.

ответ

0

Я, наконец, исправил эту проблему, добавив средство проверки ориентации. Я добавил следующее в моей .h:

@property (nonatomic, readonly) UIDeviceOrientation *orientation; 

Затем я добавил это в мой файл .m в методе viewDidLoad:

if(([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) || ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)) { 
_image1.image = [UIImage imageNamed:@"Landscape.png"]; 
} 

Это проверяет, является ли исходная ориентация пейзаж. Если это так, он загружает мое изображение Landscape.png. В противном случае, поскольку образ по умолчанию - мой Portrait.png, как установлено в Storyboard, загружается, если ориентация уже находится в портрете. Ура!

EDIT: Приведенный выше код не рекомендуется, так как вы можете столкнуться с проблемами при его использовании, например, с устройствами с блокировкой ориентации. Я изменил его, чтобы проверить для ориентации в строке состояния, а не ориентации устройства, как показано ниже:

if(([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeLeft) || 
([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeRight)) { 
_image1.image = [UIImage imageNamed:@"Landscape.png"]; 
} 

Вам не нужно объявлять переменные в .h, а просто добавить выше в методе viewDidLoad ,

 Смежные вопросы

  • Нет связанных вопросов^_^