我正在编写代码,使用自定义图像作为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如何渲染图像的感觉,无论何时它改变了它的大小