2013-12-03 4 views
6

iOS автоматически переворачивает весь ViewController при использовании языка RTL, такого как арабский, и отлично справляется с большей частью макета, особенно текста. Поведение по умолчанию - это перевернуть макет, но оставить UIImageViews той же ориентацией (поскольку вы вообще не хотите, чтобы обратные изображения).Flip UIImageViews для правосторонних языков

Есть ли способ указать, что некоторые изображения должны быть перевернуты (например, стрелки), когда на телефоне установлен язык RTL?

ответ

9

iOS 9 включает в себя метод imageFlippedForRightToLeftLayoutDirection, который вы можете использовать, который автоматически переворачивает изображение в UIImageView, когда он находится в локализации RTL.

+0

Это работа только для использования разных изображений для определенного языка. для переворотов разработчик изображения может использовать методы iOS 9.0, которые вводятся для макета представления справа налево, это 'imageFlippedForRightToLeftLayoutDirection', эти методы будут переворачивать изображение только в горизонтальном направлении. –

3

Вам нужно вручную перевернуть UIImages в UIImageView, который вы хотите, когда на телефоне установлен язык RTL. Это может быть легко достигнуто с помощью этого кода:

UIImage* defaultImage = [UIImage imageNamed:@"default.png"]; 
UIImage* flipImage = [UIImage imageWithCGImage:sourceImage.CGImage scale:1.0 orientation: UIImageOrientationUpMirrored]; 
myImageview.image = flipImage; 
+0

Это один возможный путь, я надеялся, что есть способ сделать это без необходимости добавлять IBOutlets для каждого изображения, которое я хотел изменить. – jhulst

0

Я закончил с использованием localized images для передних и задних стрелок. Это имело то преимущество, что вам не нужно было добавлять код в каждое место, где использовалось изображение, и дает возможность очистить стрелки, если есть градиенты, которые не работают хорошо перевернутыми.

0

Пока мы ждем прошивки 9 улучшился справа налево поддержку, которую вы могли бы создать UIImageView подкласс и переопределить setImage к зеркалу внутри изображения, а @ Никос-м предлагает и вызов super.image = flipImage.

Таким образом, вы можете легко установить все виды изображений, которые хотите перевернуть, используя пользовательские классы в Interface Builder вместо того, чтобы добавлять IBOutlet s.

0

Мы можем использовать imageFlippedForRightToLeftLayoutDirection, который возвращает отражение, если текущий язык RTL (справа налево). т.е.

Objective-C

UIImage * flippedImage = [[UIImage imageNamed:@"imageName"] imageFlippedForRightToLeftLayoutDirection]; 

Swift 3

let flippedImage = UIImage(named: "imageName")?.imageFlippedForRightToLeftLayoutDirection() 

Источник: Apple Docs

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