前一段时间公司有需求做文字的的渐变色,自己当时也是网上看了一些,自己写了两个方法,实现了需求,写了很久了,只是现在才想起来,就当继续学习了。分享出来供大家参考学习、下面来看看详细的介绍:
- (void) addGradientRampWithColors: (NSArray *)颜色的文本:文本(NSString *) {//标签在父视图上的(x, y)的值不是中心点 CGPoint点=CGPointMake (500); UILabel *标签=[[UILabel alloc] init); 标签。文本=文本; 标签。字体=[UIFont systemFontOfSize: 20);//标签。textAlignment=NSTextAlignmentCenter; (标签sizeToFit);//标签的中心和想象的一样啦! ! 标签。中心=CGPointMake(点。x + CGRectGetWidth (label.bounds)/2点。y - CGRectGetHeight (label.bounds)/2); (自我。视图addSubview:标签);//这个标签是和上面的标签是对齐的哦,之前都不好对齐,用这样的方法设置框架就好了//UILabel * infoTextLabel=[[UILabel alloc] init];//infoTextLabel.frame=CGRectMake (label.center。x - CGRectGetWidth (label.bounds)/2点。y + 220、50);//infoTextLabel。文本=@”你说的是哦”;//infoTextLabel。字体=[UIFont systemFontOfSize: 20);//infoTextLabel。写成backgroundColor=[用户界面颜色redColor];//infoTextLabel。numberOfLines=0;//infoTextLabel。textAlignment=NSTextAlignmentLeft;//infoTextLabel。输入textColor=[用户界面颜色blueColor];//[infoTextLabel sizeToFit];//(自我。视图addSubview infoTextLabel):;//在后面添加渐变图层 CAGradientLayer * gradientLayer=(CAGradientLayer层); gradientLayer.frame=label.frame; gradientLayer。颜色=颜色;//渐变的方向(0,0)(0,1)(1,0)(1,1)为四个顶点方向//(即。左下角(0,0)//层,[1]是右上角)。默认值//[。5、0]和[5,1] gradientLayer。曾经繁荣=CGPointMake (0,1); gradientLayer。端点=CGPointMake (1,1); (self。view。层addSublayer gradientLayer):; gradientLayer。掩码=label.layer; label.frame=gradientLayer.bounds; }
自己觉得这样的方法用起来不是很方便,所以接下来是另一种方法:
<强> m文件强>
@ implementation CFGradientLabel - (void)绘制矩形:(CGRect中)矩形{ CGSize textSize=[自我。文本sizeWithAttributes: @ {NSFontAttributeName: self.font}]; CGRect中textRect=(CGRect中){0 0 textSize};//画文字(不做显示用,主要作用是设置层的面具) CGContextRef上下文=UIGraphicsGetCurrentContext (); (自我。输入textColor设置); (自我。文本drawWithRect:矩形选择:NSStringDrawingUsesLineFragmentOrigin属性:@ {NSFontAttributeName:自我。字体}上下文:NULL];//坐标(只对设置后的画到上下文中起作用,之前画的文字不起作用) CGContextTranslateCTM(上下文,0.0 f, rect.size。——(rect.size高度。高度- textSize.height) * 0.5); CGContextScaleCTM(上下文、1.0度、-1.0度); CGImageRef alphaMask=CGBitmapContextCreateImage(上下文); CGContextClearRect(上下文、矩形);//清除之前画的文字//设置的面具 CGContextClipToMask(上下文、矩形alphaMask);//画渐变色 CGColorSpaceRef色彩=CGColorSpaceCreateDeviceRGB (); CGGradientRef梯度=CGGradientCreateWithColors(色彩,(__bridge CFArrayRef)自我。颜色,NULL); CGPoint曾经繁荣=CGPointMake (textRect.origin.x, textRect.origin.y); CGPoint端点=CGPointMake (textRect.origin。x + textRect.size.width, textRect.origin。y + textRect.size.height); CGContextDrawLinearGradient(上下文,梯度,曾经繁荣,端点,kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation);//释放内存 CGColorSpaceRelease(色彩); CGGradientRelease(梯度); CFRelease (alphaMask); }
<>强。h文件强>
@ interface CFGradientLabel: UILabel @ property(原子、强)NSArray *颜色; @end
<强>接下来是调用的方法,修改了一下的强>
- (void) addGradientLabelWithFrame: (CGPoint)点gradientText: (NSString *)文本infoText: (NSString *) infoText颜色:颜色(NSArray *)字体:字体(UIFont *) { 静态NSInteger labelTag=200; CFGradientLabel *标签=[[CFGradientLabel alloc] init); lable文本=文本; lable字体=字体; lable标签=labelTag; labletextAlignment=NSTextAlignmentCenter; (标签sizeToFit];//之前项目的时候设置了为0,忘了注释,所以有的小伙伴用的时候就不显示了……(^ - ^)//标签。α=0; lable中心=点; lable颜色=颜色; (自我。视图addSubview:标签); }iOS标签实现文字渐变色效果