【问题标题】:How to stretch Image to fill the Label Width set in Background in UILabel?如何拉伸图像以填充 UILabel 背景中设置的标签宽度?
【发布时间】:2012-01-27 21:03:51
【问题描述】:

我有简单的基于视图的应用程序。我只接受了UILabel。

以下是我在 viewDidLoad 中的代码:

lblBack.textColor = [UIColor blueColor];

UIImage *img = [UIImage imageNamed:@"cn3.png"];
lblBack.backgroundColor = [UIColor colorWithPatternImage:img];
lblBack.text = @"Hello World!!!...";

//    UIImageView *imgView = [[UIImageView alloc] initWithImage:img];
//    
//    CGRect rect = CGRectMake(0, 0, lblBack.frame.size.width, lblBack.frame.size.height);
//    [imgView setFrame:rect];
//    NSLog(@"Rect : %@",NSStringFromCGRect(rect));
//    [img drawInRect:rect];
//    imgView.contentMode = UIViewContentModeScaleAspectFill;
//    imgView.contentMode = UIViewContentModeScaleAspectFit;
//    imgView.contentMode = UIViewContentModeScaleToFill;
//    [lblBack addSubview:imgView];

评论显示了我尝试过的一些事情。我得到以下输出:

在这张图片中重复了 3 次。但我希望该图像应该被拉伸以填充标签宽度。

我已经参考了一些之前的链接,这些链接显示我在背景中添加图像并将clearColor 用于UILabel。还看到了在后台添加自定义视图的示例。但是这一切我都不想使用,除非我没有其他解决方案......

我只想在UILabel 上执行所有操作.. 除了UIImage 或UIImageView 我想使用之外没有其他控件..

【问题讨论】:

  • 您的代码似乎没问题:lblBack.backgroundColor = [UIColor colorWithPatternImage:img];// 你检查过标签的框架了吗..?
  • 我已经检查过了...它的宽度是 320..
  • @DShah,我希望我的回答能解决你的问题。如果是,请接受答案。否则,发表评论...

标签: iphone objective-c ios uiimage uilabel


【解决方案1】:

Dhiren 试试这个代码:

    UIImage *img = [UIImage imageNamed:@"cab.png"];
    CGSize imgSize = testLabel.frame.size;

    UIGraphicsBeginImageContext( imgSize );
    [img drawInRect:CGRectMake(0,0,imgSize.width,imgSize.height)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    testLabel.backgroundColor = [UIColor colorWithPatternImage:newImage];

我已经测试了这段代码。

【讨论】:

  • 你能说出为什么“newImage”UIImage 对象可以工作而“img”不能工作吗?
  • 那么为什么你不使用相同的 UIImage 指针并在你可以在单行中做到这一点时产生这个开销? testLabel.backgroundColor = [UIColor colorWithPatternImage:img];
  • -imageNamed:返回一个自动发布的图像,该图像将在未来的某个时间自动发布(具体时间未定义)。
  • 这不是选择您的解决方案的理由。无论如何...当您看到 UIColor 正在使用 UIImage 来制作颜色时,因此在 UIColor 从图像创建颜色之后,UIImage 的对象将毫无用处。
【解决方案2】:

移植 Maulik 对 Swift 2.2 的回答,您将获得以下代码:

var img: UIImage = UIImage(named: "cabImage")!
var imgSize: CGSize = testLabel.frame.size

UIGraphicsBeginImageContext(imgSize)

img.drawInRect(CGRectMake(0, 0, imgSize.width, imgSize.height))
var newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()

UIGraphicsEndImageContext();

testLabel.backgroundColor = UIColor(patternImage: newImage)

经过个人测试可以正常工作!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    相关资源
    最近更新 更多