如何让UILabel中的文字显得模糊?

时间:2009-08-24 19:23:53

标签: iphone cocoa-touch uikit

有没有办法为文字实现模糊或发光效果?或者我是否必须获取图层的图形上下文,然后对像素应用某种高斯算法?我搜索了相关的文档,但看起来阴影不会模糊,NSString,UIFont或UILabel中没有任何方法可以帮助实现它。

4 个答案:

答案 0 :(得分:3)

CGContextSetShadowWithColor可以(ab)用于绘制模糊文本。因为它可能很慢,最好将其绘制到缓冲区然后重复使用:

UIFont *font = [UIFont systemFontOfSize:18.0f];
UIGraphicsBeginImageContext(CGSizeMake(200.0f, 50.0f));
CGContextSetShadowWithColor(UIGraphicsGetCurrentContext(), CGSizeMake(0.0f, -500.0f), 2.0f, [[UIColor blackColor] CGColor]);
[@"Blurred Text!" drawAtPoint:CGPointMake(5.0f, -500.0f) withFont:font];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[imageView setImage:image];

旧答案: 一个简单的选择是多次绘制文本并每次将x / y坐标偏移1。为了加快速度,您可以将其缓存在屏幕外缓冲区中。

答案 1 :(得分:1)

你可以故意将标签放在半像素上,你会得到模糊的效果。你将无法控制它,但看起来会很模糊:

UILabel *labelOnWholePixel = [[UILabel alloc] 
                   initWithFrame:CGRectMake(20.0f, 20.0f, 280.0f, 25.0f)];
[labelOnWholePixel setText:@"Whole Pixel"];
[labelOnWholePixel setBackgroundColor:[UIColor clearColor]];

UILabel *labelOnHalfPixel = [[UILabel alloc] 
                  initWithFrame:CGRectMake(20.5f, 50.5f, 280.0f, 25.0f)];
[labelOnHalfPixel setText:@"Half Pixel"];
[labelOnHalfPixel setBackgroundColor:[UIColor clearColor]];

[[self view] addSubview:labelOnWholePixel];
[[self view] addSubview:labelOnHalfPixel];

我不确定,但在我看来,你越接近任何方向的整数,它就越清晰,所以你可以稍微控制一下。

答案 2 :(得分:0)

使用photoshop或其他图像编辑器创建清晰,模糊的叠加层。保存为PNG。将此PNG加载到UIImageview中,并将其绘制在UILabel之上。调整alpha以改变效果。

您甚至可以创建一个专门的UILabel子类来处理这种情况,并有几度模糊。

答案 3 :(得分:-1)

除了抗锯齿之外,UILabel不支持模糊其文本(或其阴影)。你必须手动编码。