2011-05-07 60 views
0

在我的iPhone应用程序我有通过view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"IndexCard.png"]];UIView的背景图像被压扁

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

这里的原始图像 - 12线:

The original image

这里是我所看到的,当我调整看法 - 它仍然有12行:

What I'm seeing - the image is squashed

而这里的我真的很想看 - 背景将被裁剪为5行:

What I want to see - the image cropped

任何想法?

回答

0

我发现了一个更简单的解决方案:

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

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

通过CALayer Class Reference我看到有一个名为contentsGravity属性,寻找:

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

它表示:

contentsGravity可能的值示于“Contents Gravity Values”。默认值是kCAGravityResize

这就解释了为什么你的图像被挤压像这样:默认情况下它调整图像大小。在另一内容重力纵观值有几个有可能最适合您的选择:

kCAGravityTop:内容是在边界矩形的顶边水平居中。

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

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

我猜kCAGravityTop是你正在寻找可能的内容,所以你设置你的视图的层的contentsGravity这样的:

view.layer.contentsGravity = kCAGravityTop;