如何拉伸UIImage以适应文本?

时间:2012-12-10 08:00:48

标签: iphone objective-c ios xcode uiimage

我正在我的应用程序中实现一个标记系统,为此,我需要一个标记的背景图像和覆盖该图像的文本。但问题是 - 如何拉伸图像以“适合”文本? “数学”运作良好,但像“经济学”这样的词语并不会与背景图像重叠。

这就是我的标签:

3 个答案:

答案 0 :(得分:1)

我最好猜测使用可伸缩图像,这些只是普通图像,您可以设置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)];

2010只是示例,它们可能与您的图片不同。如果这些是UIButton,您可以将可伸展图像设置为按钮的背景,并且它将随按钮正确增长。如果您从UILabel的代码设置文本,则可以使用sizeWithFont:constrainedToSize:来计算字符串的含义。然后设置正确的图像大小。

答案 1 :(得分:1)

您可以找到字符串宽度(在您的情况下可能是UILabel),如下所示

CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font 
                        constrainedToSize:maximumLabelSize 
                        lineBreakMode:yourLabel.lineBreakMode]; 

知道文本长度后,您可以使用它并将背景设置为可伸缩图像。

UIImage *strechableImage = [[UIImage imageNamed:@"tagImage"] resizableImageWithCapInsets:UIEdgeInsetsMake(3, 3, 3, 25)]

Insets(大写)是(顶部,左侧,底部,顶部),用于定义未缩放/拉伸的区域(例如圆角)。

来自Apple文档

在缩放图像或调整图像大小时,标题所覆盖的区域不会缩放或调整大小。相反,在每个方向上没有被盖子覆盖的像素区域是平铺的,从左到右和从上到下,以调整图像的大小。

答案 2 :(得分:1)

首先需要计算文本的预期大小,然后相应地给图像框架。如果需要,您可以使用带帽宽和帽高的图像。这是代码段。

    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;