新手自定义学习UILabel文字发光效果
最近项目中经常有文字放光效果的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
最终效果: