2012-12-10 40 views
1

我在我的应用程序中实现了一个标签系统,为了实现这一点,我需要标签和文本的背景图像来覆盖该图像。问题是 - 我怎样才能将图像拉伸以适应文字? “数学”运作良好,但像“经济学”这样的词不会与背景图像重叠。如何拉伸UIImage以适应文字?

这就是我的标签是这样的:

回答

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; 
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:来计算字符串的字符。然后设置图像的正确大小。

+0

从[苹果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

+0

是的,你是正确的,但是如果你的目标是iOS 4.3,你也可以使用'stretchableImageWithLeftCapWidth: topCapHeight:'。 – rckoenes

+0

是的,只有我们的目标是iOS 4.3以上。对于iOS 5.0以上版本,这已被弃用。 – iDev

1

您可以找到字符串宽度(可能的UILabel你的情况),像下面

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

一旦文本长度是已知的,您可以使用,并设置为背景图片拉伸。

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

的插图(CAPS)是(顶部,左边,底部,顶部)和限定了不进行缩放/拉伸(例如圆角)的区域。

从苹果文档

在缩放或图像的大小调整,由盖所覆盖的区域不进行缩放或调整大小。相反,在每个方向上未被帽覆盖的像素区域是平铺的,从左到右和从上到下来调整图像的大小。