我正在编写代码以使用自定义图片作为UIView
的背景。
该应用仅以纵向运行。在4“视网膜屏幕之前,我使用固定尺寸,手绘png作为背景图像(下面为card.png
)。我的代码如下:
UIView* frontView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)];
frontView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
UIImage* cardImage = [UIImage imageNamed:@"card.png"];
UIImageView* im = [[UIImageView alloc] initWithImage:cardImage];
im.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin;
[frontView addSubview:im];
// frontView has a bunch of stuff added...
正如您所期望的那样,当我在iPhone 5上运行时,除了手绘的png card.png
之外,所有内容都可以动态调整大小和位置。因此背景图像没有使用可用的全高......
那么(我想)我想做什么,是这样的......
UIImage* cardImage = [[UIImage imageNamed:@"card_resizable.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(72, 0, 60, 0)];
我已将card.png
重新绘制为card_resizable.png
- 它的高度为140像素,中间有一个8像素的块,我想要平铺,所以顶部插图高72像素底部插图高60像素。
下一步是什么?
我应该创建动态大小为UIImageView
的<{1}}吗?
如何制作可调整大小的图片,调整大小?
我尝试过的一些事情......没有一件事能够调整可调整大小的图像。
干杯, 加文
更新
我错误地设置了frontView
的像素值
这些值基于UIEdgeInsetsMake(72, 0, 60, 0)
图像。当更改为@2x
时 - 我得到正确的垂直大小调整。
正如Mike指出的那样,我需要将UIEdgeInsetsMake(36, 0, 30, 0)
的大小设置为父级,并正确设置为UIImageView
:
autoresizingMask
我知道im.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
动态调整大小正确,以填充其父视图 - UIImageView
(我已经给它一个绿色背景来在3.5英寸屏幕和4英寸屏幕上进行视觉检查
可调整大小的图片frontView
也正确地在垂直平面上调整大小。
答案 0 :(得分:2)
将可伸缩图像传递给UIImageView
后,您只需将该图像视图调整到您需要的任何高度。
在您的情况下,您可能希望通过执行以下操作使图像视图填充其父级:
im.frame = frontView.bounds;
im.autoresizingMask =
UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[frontView addSubview:im];
我们让im
填充frontView
并告诉它在其父级(frontView
)更改大小时自动增加其宽度/高度。这应该做你想要的。
答案 1 :(得分:0)
你可以尝试使用stretchableImage
UIImage *image = [UIImage imageNamed:@"card_resizable.png"];
UIImage* cardImage = [image stretchableImageWithLeftCapWidth:0.0f
topCapHeight:70.0f];
答案 2 :(得分:-1)
看看UIView的contentMode属性。它应该让你对UIImageView如何在内部渲染图像有所了解,只要它改变它的大小。