像android九补丁一样拉伸图像?
Posted
技术标签:
【中文标题】像android九补丁一样拉伸图像?【英文标题】:stretch a Image like android nine-patch? 【发布时间】:2011-10-25 07:45:53 【问题描述】:UIImage
方法:
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight
.
这里的可拉伸区域被强制为单个像素高/宽。
我无法设置可拉伸区域,所以我想知道:有没有 UIImage 类别可以做到这一点?
我google了一下,找到了一个lib。
问题: Is there a nine-patch loader for iPhone?
公告:http://blog.tortuga22.com/2010/05/31/announcing-tortuga-22-ninepatch/
这是一张源图片,我想拉伸里面的灰色矩形。
提前致谢。
【问题讨论】:
你为什么不使用 9-patch-loader-for-iphone 可能有更好的解决方案,比如 uiimage 类别,像这样: - (UIImage *)imageWithStretchableRect:(CGRect)rect destRect:(CGRect)destRect 我使用这个库,效果不是我想要的。我想重复图像的某些部分。 【参考方案1】:实现此目的的一种方法是使用以下方法,
UIImage * backgroundImg = [UIImage imageNamed:@"bg.png"];
backgroundImg = [backgroundImg resizableImageWithCapInsets:UIEdgeInsetsMake(2,2, 2, 2)];
[imgView setImage: backgroundImg];
UIEdgeInsetsMake(2,2, 2, 2) 是您希望不可拉伸的像素数量。
【讨论】:
【参考方案2】:Tortuga22 software可以实现九个补丁
你可以从这个 GitHub here找到源代码
这样使用
[btnSubmit setImage: [TUNinePatchCache imageOfSize:[btnSubmit bounds].size
forNinePatchNamed:@"imgNormalBackground"]
forControlState:UIControlStateNormal];
【讨论】:
【参考方案3】:从 ios5 开始,您可以使用resizableImageWithCapInsets:
来实现这一点。
【讨论】:
【参考方案4】:我不想为我们拥有的简单的 9 个补丁图像加载这么多代码。所以无论如何,对于那些感兴趣的人来说,这里有一个简单的解决方案。它对我们的 3 像素拉伸区域进行了硬编码,但您可以根据需要轻松调整这些区域,或者使用一些基本代码在图像中找到这些区域,并使用它来代替我硬编码的插入参数。
+ (UIImage *) makeNinePatchImage:(UIImage *)image;
//Clear the black 9patch regions
CGRect imageRect = CGRectMake(0.0, 0.0, image.size.width, image.size.height);
UIGraphicsBeginImageContextWithOptions(image.size, NO, [UIScreen mainScreen].scale);
[image drawInRect:imageRect];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, CGRectMake(0, 0, image.size.width, 1));
CGContextClearRect(context, CGRectMake(0, 0, 1, image.size.height));
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIEdgeInsets insets;
//hard coded for now, could easily read the black regions if necessary
insets.left = insets.right = image.size.width / 2 - 1;
insets.top = insets.bottom = image.size.height / 2 - 1;
UIImage *nineImage = [image resizableImageWithCapInsets:insets
resizingMode:UIImageResizingModeStretch];
return nineImage;
然后要在按钮的背景中使用它,只需这样称呼它:
[self.dummyButton setBackgroundImage:[EVUtility makeNinePatchImage:learnMoreImage] forState:UIControlStateNormal];
完成。
【讨论】:
【参考方案5】:如果我理解正确,您希望矩形的长度和高度都增加。 虽然可能有更有效的解决方案,但我可以建议将边界分解为一个基本单元。一个接一个地重复添加此图像,以形成所需长度和高度的边框矩形。然后用灰色绘制内部矩形。
【讨论】:
是的,完全正确。我只想重复部分图像***.com/questions/7901059/… 谢谢你的回复。你的回答对我有帮助以上是关于像android九补丁一样拉伸图像?的主要内容,如果未能解决你的问题,请参考以下文章