1

我正在编写代码以使用自定义图像作为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.pngcard_resizable.png- 它的高度为 140 像素,中间有一个 8 像素的块,我想平铺,所以顶部插图是 72 像素高,底部插图是 60 像素高。

下一步是什么?

我应该创建UIImageView具有动态大小的frontView

如何制作可调整大小的图像,调整大小?

我尝试过的几件事......它们都没有导致平铺可调整大小的图像。

干杯,加文

更新:

我错误地设置了这些值的像素值,UIEdgeInsetsMake(72, 0, 60, 0) 这些值是基于@2x图像的。当更改为UIEdgeInsetsMake(36, 0, 30, 0)- 我得到正确的垂直调整大小。

正如迈克指出的那样,我需要将大小设置UIImageView为父级,并正确设置为autoresizingMask

im.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

我知道UIImageView正确地调整大小以填充其父视图- frontView(我给它一个绿色背景,以便在 3.5" 屏幕和 4" 屏幕上进行目视检查。

可调整大小的图像cardImage也在垂直平面上正确调整大小。

4

3 回答 3

2

将可拉伸图像传递给 a 后UIImageView,您只需将该图像视图的大小调整为所需的任何高度。

在您的情况下,您可能希望通过执行以下操作使图像视图填充其父级:

im.frame = frontView.bounds;
im.autoresizingMask =
    UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[frontView addSubview:im];

我们im填充frontView并告诉它在其父级 ( frontView) 更改大小时自动增加其宽度/高度。这应该做你想要的。

于 2013-04-23T08:28:23.283 回答
0

你能用stretchableImage试试吗

UIImage *image = [UIImage imageNamed:@"card_resizable.png"];
UIImage* cardImage = [image stretchableImageWithLeftCapWidth:0.0f 
                                                topCapHeight:70.0f];
于 2013-04-23T08:33:21.023 回答
-1

看看 UIView contentMode 属性。它应该让您了解 UIImageView 如何在内部呈现图像,无论何时改变它的大小。

于 2013-04-23T08:22:42.117 回答