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

Iphone 当用于UIImageView/UIView时,如何调整使用ResizebleMageWithCapInsets创建的UIImage的大小,iphone,ios,uiview,uiimageview,uiimage,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 = UIViewAutoresizi

我正在编写代码,以使用自定义图像作为
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)];

我重画了<代码>卡。PNG < /代码>作为代码> CordyResiZabel.PNG < /C> >它的高度是140像素,中间有8像素块,我想要瓦片,所以顶部插图是72像素高,底部插图是60像素高。

下一步是什么

我是否应该创建动态大小为
frontView
UIImageView

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

我尝试过的几件事……没有一件能使可调整大小的图像平铺

干杯, 加文

更新:

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

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

im.autoresizingMask=UIViewAutoresizingFlexibleWidth | uiviewautoresizingflexiblewhight;

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


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

查看UIView contentMode属性。它应该让您了解UIImageView在更改图像大小时如何在内部呈现图像。

查看UIView contentMode属性。它应该让您了解当UIImageView改变图像的大小时,它会在内部渲染图像。

一旦将可拉伸图像传递给
UIImageView
后,您只需将该图像视图调整到所需的高度即可

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

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

我们让
im
填充
frontView
,并告诉它在其父对象(
frontView
)更改大小时自动增加其宽度/高度。这应该可以满足您的需要。

一旦您将可拉伸图像传递给
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];

你能试着用StretchableMage吗

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

嘿,谢谢,我试过用LeftCapWidth伸缩图像,但这不是我需要的。
用CapInsets伸缩图像是正确的;我犯了其他错误。干杯。@GavinHope听到这个消息很高兴:)嘿,谢谢,我尝试了
用LeftCapWidth伸缩图像
-但这不是我所需要的。
用CapInsets伸缩图像
是正确的;我还犯了其他错误。干杯。@GavinHope听到这个消息很高兴:)嗨,迈克,谢谢你指出了一些事情:设置边界和自动调整大小的掩码。我已经尝试过设置边界,但是失败了使用一个调整大小的掩码…但是错误的调整大小掩码,我需要
UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight
,正如你所指出的。事实上,真正的问题是我的cap插图…72和60的值是基于
@2x
图像的(你们不知道这一点)…当我将其放入1x空间时,我得到了所需的垂直调整大小(使用正确的
autoresizingMask
。嗨,迈克,谢谢你指出了这些问题:设置边界和自动调整大小掩码。我曾尝试设置边界并使用了一个调整大小掩码…但是调整大小掩码错误,我需要
UIViewAutoresizingFlexibleWidth | uiviewautoresizingflexiblewhight
,正如你所说的那样特德出来了。事实上,真正的问题是我的帽子插图…72和60的值是基于
@2x
图像的(你们不可能知道)…当我把它们放在1x空间时,我得到了所需的垂直调整大小(正确的
自动调整大小任务
)。