UIView 背景图像被压扁
Posted
技术标签:
【中文标题】UIView 背景图像被压扁【英文标题】:UIView background image gets squashed 【发布时间】:2011-05-07 11:24:31 【问题描述】:在我的 iPhone 应用程序中,我有一个 UIView,其中包含通过 view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"IndexCard.png"]];
创建的平铺背景图像
在我的 ios3.1 设备上,当视图调整大小时,背景图像会被压扁 - 即它平铺相同的次数,但每个平铺的高度会降低。相反,我希望每个图块保持相同的大小,但重复次数要根据新的视图大小进行调整。如果我清除背景然后重置它,问题就会得到解决,但这似乎是解决问题的一个特别低效的解决方案。在iOS4.3模拟器上可以正常运行。
这是原始图像 - 12 行:
这是我在调整视图大小时看到的 - 它仍然有 12 行:
而这是我真正想看到的 - 背景将被裁剪为 5 行:
有什么想法吗?
【问题讨论】:
【参考方案1】:视图的backgroundColor
属性为CALayer
指定颜色(或图案),这是绘制视图的基础。您可以通过寻址视图的 layer
属性来更改 CALayer 的属性。
查看CALayer Class Reference,我看到有一个名为contentsGravity
的属性:
确定接收者的内容如何 位于其范围内。
表示:
contentsGravity
的可能值显示在“Contents Gravity Values”中。默认值为kCAGravityResize
。
这就解释了为什么你的图片会被这样压扁:默认情况下它会调整图片的大小。查看其他 Contents Gravity Values 有几个选项可能最适合您:
kCAGravityTop
: 内容在边界矩形的上边缘水平居中。
kCAGravityCenter
:内容在边界矩形中水平和垂直居中。'kCAGravityBottom':内容在边界矩形的底部边缘水平居中。
我猜kCAGravityTop
可能是您要查找的内容,因此您可以像这样设置视图层的contentsGravity
:
view.layer.contentsGravity = kCAGravityTop;
【讨论】:
【参考方案2】:我找到了一个更简单的解决方案:
view.contentMode = UIViewContentModeRedraw;
// instead of the default UIViewContentModeScaleToFill
【讨论】:
以上是关于UIView 背景图像被压扁的主要内容,如果未能解决你的问题,请参考以下文章