Справка по фоновому изображению UIImageView и повороту

#iphone #objective-c #ios #uiimageview #uiinterfaceorientation

#iPhone #objective-c #iOS #uiimageview #ориентация на интерфейс ui

Вопрос:

В моем приложении для iPad в настоящее время у меня есть фоновое изображение png размером 1024×1024 пикселей, и я устанавливаю его, используя следующее

 UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background-image"]];
[self.view addSubview:imgView];
[self.view sendSubviewToBack:imgView];
[imgView release];
  

Это исправляет UIImageView, и вид центрируется в альбомной ориентации, однако в портретной он смещен от центра.

Я поиграл с некоторыми настройками contentMode, но не повезло, я либо получаю портретное изображение в центре, либо альбомную ориентацию в центре, но не оба.

Не мог бы кто-нибудь, пожалуйста, помочь мне с центрированием UIImageView как в портретной, так и в альбомной ориентации после поворота.

Заранее спасибо, Мэтт

Ответ №1:

Вам необходимо установить contentMode , frame и соответствующую маску автоматического изменения размера:

 UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background-image"]];
imgView.frame = self.view.bounds;
imgView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
imgView.contentMode = UIViewContentModeScaleAspectFill;
[self.view addSubview:imgView];
[self.view sendSubviewToBack:imgView];
[imgView release];
  

Комментарии:

1. Идеальный… Не могу поверить, что я пропустил маску автоматического изменения, я пытался применить UIViewAutoresizingFlexibleWidth к contentMode. Это сводило меня с ума в течение последнего дня или около того. Как лучше всего отображать это UIImageView в режиме «за всеми» в моем приложении? В настоящее время для всех параметров view backgroundColor установлено значение clearColor, и я поместил приведенный выше код в свой viewWillAppear на навигационном контроллере. Большое спасибо omz

2. добавьте imageview в главное окно и сделайте все контроллеры прозрачными. но автоматическое изменение размера для этого не сработает. вам нужно вручную повернуть окно

3. @rahul есть ли у вас какие-либо примеры кода о том, как выполнить поворот окна вручную? Считается ли это лучшей практикой, чем то, что я сделал? поскольку навигационный контроллер всегда будет доступен, он позаботится о вращении.

4. @Мэтт Прайс нашел в Google, как установить ориентацию для строки состояния. при повороте окно строки состояния будет вращаться.

Ответ №2:

Проверьте autoresizingMask свойство на наличие imageView .

Комментарии:

1. Спасибо 7kv7, omz дал немного более подробный ответ и пример кода, но большое спасибо за ответ. Ключевым моментом была маска автоматического изменения размера.