我在我的应用程序中实现了一个标签系统,为了实现这一点,我需要标签和文本的背景图像来覆盖该图像。问题是 - 我怎样才能将图像拉伸以适应文字? “数学”运作良好,但像“经济学”这样的词不会与背景图像重叠。如何拉伸UIImage以适应文字?
这就是我的标签是这样的:
我在我的应用程序中实现了一个标签系统,为了实现这一点,我需要标签和文本的背景图像来覆盖该图像。问题是 - 我怎样才能将图像拉伸以适应文字? “数学”运作良好,但像“经济学”这样的词不会与背景图像重叠。如何拉伸UIImage以适应文字?
这就是我的标签是这样的:
您首先需要计算文本的预期大小,然后相应地为框架指定图像。如果需要,您可以使用带有宽度和高度的图像。这是代码片段。
CGSize maximumLabelSize = CGSizeMake(600,52); // maximum possible size
CGSize expectedLabelSize = [brandName sizeWithFont:[UIFont fontWithName: @"Helvetica-Bold" size:20]
constrainedToSize:maximumLabelSize
lineBreakMode:UILineBreakModeTailTruncation];
UIImage *centerStretchedImage =[[UIImage imageNamed:@"yourImage.png"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0];
CGRect frame = CGRectMake(x, y, expectedLabelSize.width+20,52);
UIImageView *dynamicImage = [[UIImageView alloc] initWithFrame:frame];
dynamciImage.image = centerStretchedImage;
我最好的猜测是使用拉伸图片,这些都是让您设定的iOS可以舒展部分只是普通的图像。
这些图像是很容易的:
UIImage *imageTemp = [UIImage imageNamed:@"ButtonBackground.png"];
// For iOS 4.3 and lower
UIImage *stretchableImage = [imageTemp stretchableImageWithLeftCapWidth:20 topCapHeight:10];
// if you are targetting iOS 5 and higher
UIImage *stretchableImage = [imageTemp resizableImageWithCapInsets:UIEdgeInsetsMake(10, 10, 20, 20)];
的20
和10
只是举例来说,他们可能是你的图像不同。如果这些是UIButton
,您可以将可拉伸图像设置为按钮的背景,并且该按钮将正确增长。如果您将代码中的文本设置为UILabel
,则可以使用sizeWithFont:constrainedToSize:
来计算字符串的字符。然后设置图像的正确大小。
您可以找到字符串宽度(可能的UILabel你的情况),像下面
CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font
constrainedToSize:maximumLabelSize
lineBreakMode:yourLabel.lineBreakMode];
一旦文本长度是已知的,您可以使用,并设置为背景图片拉伸。
UIImage *strechableImage = [[UIImage imageNamed:@"tagImage"] resizableImageWithCapInsets:UIEdgeInsetsMake(3, 3, 3, 25)]
的插图(CAPS)是(顶部,左边,底部,顶部)和限定了不进行缩放/拉伸(例如圆角)的区域。
从苹果文档
在缩放或图像的大小调整,由盖所覆盖的区域不进行缩放或调整大小。相反,在每个方向上未被帽覆盖的像素区域是平铺的,从左到右和从上到下来调整图像的大小。
从[苹果DOC(http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/DeprecationAppendix/AppendixADeprecatedAPI.html#//apple_ref/occ/instm/UIViewController/viewDidUnload)_stretchableImageWithLeftCapWidth:创建并返回一个带有指定顶点值的新图像对象。 (在iOS 5.0中不推荐使用,不要使用resizableImageWithCapInsets:指定cap insets,使内部为1x1区域。)_ – iDev
是的,你是正确的,但是如果你的目标是iOS 4.3,你也可以使用'stretchableImageWithLeftCapWidth: topCapHeight:'。 – rckoenes
是的,只有我们的目标是iOS 4.3以上。对于iOS 5.0以上版本,这已被弃用。 – iDev