当用于UIImageView / UIView时,如何调整使用resizableImageWithCapInsets创建的UIImage的大小

时间:2013-04-23 08:20:38

标签: iphone ios uiview uiimageview uiimage

我正在编写代码以使用自定义图片作为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也正确地在垂直平面上调整大小。

3 个答案:

答案 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如何在内部渲染图像有所了解,只要它改变它的大小。