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



我正在编写代码,使用自定义图像作为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像素高。

下一步是什么?

我应该用frontView的动态大小创建UIImageView吗?

如何设置可调整大小的图像?

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

欢呼,加文

更新:

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

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

im.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

我知道UIImageView的大小是动态的,正确的,以填充它的父视图- frontView(我给了它一个绿色的背景,在3.5英寸屏幕和4英寸屏幕上进行视觉检查。

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

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

在您的情况下,您可能希望通过以下方式使图像视图填充其父视图:

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

我们让im填充frontView,并告诉它在其父(frontView)改变大小时自动增加其宽度/高度。

你可以尝试使用stretchableImage

UIImage *image = [UIImage imageNamed:@"card_resizable.png"];
UIImage* cardImage = [image stretchableImageWithLeftCapWidth:0.0f 
                                                topCapHeight:70.0f];

看看UIView的contentMode属性。它应该给你一些关于UIImageView如何渲染图像的感觉,无论何时它改变了它的大小

相关内容

最新更新