翻转从右到左语言的UIImageViews

时间:2013-12-03 14:58:17

标签: ios internationalization

当使用像阿拉伯语这样的RTL语言时,iOS会自动翻转整个ViewController,并且在大多数布局(特别是文本)方面做得很好。默认行为是翻转布局,但保留UIImageViews相同的方向(因为您通常不想反转图像)。

当手机设置为RTL语言时,有没有办法指定某些图像应该被翻转(例如箭头)?

8 个答案:

答案 0 :(得分:11)

iOS 9包含您可以使用的imageFlippedForRightToLeftLayoutDirection方法,该方法在RTL本地化时自动翻转UIImageView中的图像。

答案 1 :(得分:5)

到目前为止,我发现最好的解决方案是将资产文件中的图像标记为镜像。 enter image description here

答案 2 :(得分:3)

当手机设置为RTL语言时,您必须手动翻转所需的UIImageView中的UIImages。这可以通过以下代码轻松实现:

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

答案 3 :(得分:3)

如果当前语言是RTL(从右到左),我们可以使用返回翻转图像的imageFlippedForRightToLeftLayoutDirection。即

<强>目标c

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

Swift 3

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

来源:Apple Docs

答案 4 :(得分:1)

我最后使用localized images作为向前和向后箭头。这样做的好处是不必在每个地方添加图像使用图像,并且如果有不能正常翻转的渐变,则有机会清理箭头。

答案 5 :(得分:0)

当我们等待iOS 9改进了从右到左的支持时,您可以创建一个UIImageView子类并覆盖setImage以镜像内部@ nikos-m建议并调用super.image = flipImage

通过这种方式,您可以使用Interface Builder中的自定义类轻松设置要翻转的所有图像视图,而不必添加IBOutlet

答案 6 :(得分:0)

快捷键5

如果要个性化图像翻转,可以将每个图像以所需的方向注册,因为布局方向是特征:

let leftToRight = UITraitCollection(layoutDirection: .leftToRight)
let rightToLeft = UITraitCollection(layoutDirection: .rightToLeft)
let imageAsset = UIImageAsset()
let leftToRightImage = UIImage(named: "leftToRightImage")!
let rightToLeftImage = UIImage(named: "rightToLeftImage")!
imageAsset.register(leftToRightImage, with: leftToRight)
imageAsset.register(rightToLeftImage, with: rightToLeft)

这与在@SergioM回答中在资产目录中进行配置相同。

答案 7 :(得分:0)

您可以尝试以下代码:

let image = RTLsupportBoolValue ? UIImage(named: "imagename")?.imageFlippedForRightToLeftLayoutDirection() : UIImage(named: "imagename")
            
imageView.image = image

imageFlippedForRightToLeftLayoutDirection() --> 该方法用于在X轴上翻转图片。如果变量即“RTLsupportBoolValue == true”来了,你会显示图片倒置。如果涉及“false”,您将打印相同的图像。 “图像”变量保存了这个图像,然后你设置了 ImageView。