最近项目中经常有文字放光效果的UI,特意在网路上找了下,开始是在code4app中找到一个,但是是不是的会出现不出现光晕的bug,在寻找找到了cocoachina会员hxy060799分享的GlowLabel,效果不错,特意写了注释贴出来,以防他日忘记。
1、新建一个基于UILabel的子类
2、在这个子类中定义red、green、blue三个颜色值变量和一个发光光晕范围变量size。
3、复写UILable的drawTextInRect方法,并使用CGContextRef来进行光晕效果绘制。
基本思路就是这样子了,下面是部分主要代码:
.h文件
- //创建UILable的子类 GlowLable
- @interface GlowLabel : UILabel
- //定义颜色值全局变量和放大值全局变量
- @property(assign,nonatomic)float redValue;
- @property(assign,nonatomic)float greenValue;
- @property(assign,nonatomic)float blueValue;
- @property(assign,nonatomic)float size;
- @end
.m文件
- @implementation GlowLabel
- @synthesize redValue;
- @synthesize greenValue;
- @synthesize blueValue;
- @synthesize size;
- -(id) initWithFrame: (CGRect)frame {
- if ((self = [super initWithFrame:frame])) {
- //变量初始化
- redValue = 0.0f;
- greenValue = 0.50f;
- blueValue = 1.0f;
- size=20.0f;
- }
- return self;
- }
- //重写UILable类的drawTextInRect方法
- -(void) drawTextInRect: (CGRect)rect {
- //定义阴影区域
- CGSize textShadowOffest = CGSizeMake(0, 0);
- //定义RGB颜色值
- float textColorValues[] = {redValue, greenValue, blueValue, 1.0};
- //获取绘制上下文
- CGContextRef ctx = UIGraphicsGetCurrentContext();
- //保存上下文状态
- CGContextSaveGState(ctx);
- //为上下文设置阴影
- CGContextSetShadow(ctx, textShadowOffest, size);
- //设置颜色类型
- CGColorSpaceRef textColorSpace = CGColorSpaceCreateDeviceRGB();
- //根据颜色类型和颜色值创建CGColorRef颜色
- CGColorRef textColor = CGColorCreate(textColorSpace, textColorValues);
- //为上下文阴影设置颜色,阴影颜色,阴影大小
- CGContextSetShadowWithColor(ctx, textShadowOffest, size, textColor);
- [super drawTextInRect:rect];
- //释放
- CGColorRelease(textColor);
- CGColorSpaceRelease(textColorSpace);
- //重启上下文
- CGContextRestoreGState(ctx);
- }
- @end
最终效果: