0

在我的 iPhone 应用程序中,我有一个 UIView,其中包含通过创建的平铺背景图像view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"IndexCard.png"]];

在我的 iOS3.1 设备上,当视图调整大小时,背景图像会被压扁 - 即它平铺相同的次数,但每个平铺的高度会降低。相反,我希望每个图块保持相同的大小,但重复次数要根据新的视图大小进行调整。如果我清除背景然后重置它,问题就会得到解决,但这似乎是解决问题的一个特别低效的解决方案。在 iOS4.3 模拟器上它可以正常工作。

这是原始图像 - 12 行:

原始图像

这是我在调整视图大小时看到的 - 它仍然有 12 行:

我所看到的 - 图像被压扁

而这是我真正想看到的 - 背景将被裁剪为 5 行:

我想看到的 - 裁剪的图像

有任何想法吗?

4

2 回答 2

1

视图的属性是为绘制视图的基础backgroundColor分配颜色(或图案) 。CALayer您可以通过处理视图的属性来更改 CALayer 的属性layer

查看CALayer 类参考,我看到有一个属性叫做contentsGravity

确定接收器的内容如何在其边界内定位。

它表明:

的可能值contentsGravity显示在“<a href="http://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CALayer_class/Introduction/Introduction.html#//apple_ref/doc/constant_group/Contents_Gravity_Values “ rel="nofollow">内容重力值”。默认值为kCAGravityResize

这就解释了为什么你的图像会像这样被挤压:默认情况下它会调整图像的大小。查看其他内容重力值,有几个选项可能最适合您:

kCAGravityTop:内容在边界矩形的上边缘水平居中。

kCAGravityCenter:内容在边界矩形中水平和垂直居中。

'kCAGravityBottom':内容在边界矩形的底部边缘水平居中。

我猜这kCAGravityTop可能是您正在寻找的,所以您将视图的图层设置为contentsGravity

view.layer.contentsGravity = kCAGravityTop;
于 2011-05-08T08:53:39.557 回答
0

我找到了一个更简单的解决方案:

view.contentMode = UIViewContentModeRedraw;
// instead of the default UIViewContentModeScaleToFill
于 2011-05-17T07:03:59.317 回答