在我的iPhone应用程序中,我有一个UIView,其中包含通过view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"IndexCard.png"]];
在我的iOS3.1设备上,当视图调整大小时,背景图像会被压扁 - 即它会平铺相同的次数,但每个图块的高度会降低。相反,我希望每个图块保持相同的大小,但根据新的视图大小调整重复的数量。如果我清除背景然后重置它,问题就会得到解决,但这似乎是解决问题的一个特别无效的解决方案。在iOS4.3模拟器上它可以正常工作。
这是原始图像 - 12行:
这是我在调整视图大小时所看到的内容 - 它仍有12行:
虽然这是我真正想看到的 - 背景将被裁剪为5行:
有什么想法吗?
答案 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