UIView背景图像被压扁了

时间:2011-05-07 11:24:31

标签: iphone iphone-sdk-3.0 ios-3.x

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

创建的平铺背景图像

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

这是原始图像 - 12行:

The original image

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

What I'm seeing - the image is squashed

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

What I want to see - the image cropped

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

视图的backgroundColor属性正在为CALayer指定颜色(或图案),这是绘制视图的基础。您可以通过查看视图的layer属性来更改CALayer的属性。

浏览CALayer Class Reference我发现有一个名为contentsGravity的属性:

  

确定接收者的内容   位于其范围内。

它表明:

  

contentsGravity的可能值显示在“Contents Gravity Values”中。默认值为kCAGravityResize

这就解释了为什么你的图像被压扁的原因:默认情况下它正在调整图像的大小。看一下其他目录重力值,有几个选项最适合您:

  

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

     

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

     

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

我猜你kCAGravityTop可能就是你想要的,所以你要像这样设置你的视图层contentsGravity

view.layer.contentsGravity = kCAGravityTop;

答案 1 :(得分:0)

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

view.contentMode = UIViewContentModeRedraw;
// instead of the default UIViewContentModeScaleToFill