ios 文字渐变色实现的两种方法

前段时间我写过一个文字渐变色的demo, 最近又在网上看到一个新的设置文字渐变色的方法, 就把这两种方法分享出来吧, 我认为应该还有好多种方法, 以后看到后再补充.

效果图:

  其实这两种方法实现原理及思路是差不多的, 只是使用的类和方法不一样.

  (一)_ 自定义label, 实现 drawRect 方法, 在该方法里面画渐变色

    思路: 1)_ 把label的文字画到context上去(画文字的作用主要是设置 layer 的mask)

      CGContextRef context = UIGraphicsGetCurrentContext();

     [self.textColor set];

     [self.text drawWithRect:rect options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName :       self.font} context:NULL];

       2)_ 设置mask : CGContextClipToMask(context, rect, alphaMask); 并清除文字

CGContextTranslateCTM(context, 0.0f, rect.size.height- (rect.size.height - textSize.height)*0.5);

CGContextScaleCTM(context, 1.0f, -1.0f);

CGImageRef alphaMask = NULL;

alphaMask = CGBitmapContextCreateImage(context);

CGContextClearRect(context, rect);// 清除之前画的文字

CGContextClipToMask(context, rect, alphaMask);

       3)_ 翻转坐标, 画渐变色

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)self.colors, NULL);

CGPoint startPoint = CGPointMake(textRect.origin.x,

textRect.origin.y);

CGPoint endPoint = CGPointMake(textRect.origin.x + textRect.size.width,

textRect.origin.y + textRect.size.height);

CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation);

// 释放内存

CGColorSpaceRelease(colorSpace);

CGGradientRelease(gradient);

CFRelease(alphaMask);

  (二)_ 不需要自定义label, 利用 CAGradientLayer 设置渐变图层

    思路: 1)_ 新建label, 把label添加到view上(这个label图层作用也只是设置mask, 不用来显示)

        2)_ 创建 CAGradientLayer, 设置其渐变色, 将其添加到 label 的superView的layer上, 并覆盖在label上

        3)_ 设置 gradientLayer的mask为 label的layer 重新设置label的frame

  具体详细代码已经写成demo 上传到github(点击查看)

参考:文字渐变效果:图层中的mask属性

时间: 2024-12-24 11:41:56

ios 文字渐变色实现的两种方法的相关文章

ios uiimage初始化时的两种方法

第一种方式:UIImage *image = [UIImage imageNamed:@"image"]; 使用这种方式,第一次读取的时候,先把这个图片存到缓存里,下次再使用时直接从缓存中读取:优点:只有第一次使用的时候稍慢,接下来在使用就会稍快:缺点:如果在当前工程中只使用一次会浪费内存. 第二种方式:initWithContentsOfFiles初始化时,每次都会根据路径去读取,不会占用内存,如果图片在当前工程中只使用一次,应该选择这个方法.

实现iOS长时间后台的两种方法:Audiosession和VOIP(转)

分类: Iphone2013-01-24 14:03 986人阅读 评论(0) 收藏 举报 我们知道iOS开启后台任务后可以获得最多600秒的执行时间,而一些需要在后台下载或者与服务器保持连接的App是如何突破600秒的限制的呢?像网易公开课就可以在后台持续下载,优酷也可以在后台持续缓存,这是怎么做到的呢?一般来说,要实现iOS长时间后台运行,需要声明VOIP.Audio或GPS. Audiosession 实现方法很简单,就是在后台一直播放一个无声的音乐文件,这样就相当于声明了Audio,就可

ios 设置屏幕方向的两种方法

第一种:通过人为的办法改变view.transform的属性. 具体办法: view.transform一般是View的旋转,拉伸移动等属性,类似view.layer.transform,区别在于View.transform是二维的,也就是使用仿射的办法通常就是带有前缀CGAffineTransform的类(可以到API文档里面搜索这个前缀的所有类),而view.layer.transform可以在3D模式下面的变化,通常使用的都是前缀为CATransform3D的类. 这里要记住一点,当你改变

iOS读取图片数据的两种方法:UIImageJPEG和UIImagePNG

UIImageJPEGRepresentation函数有两个参数:引用的图片和压缩系数. UIImagePNGRepresentation(UIImage * image)函数只有一个引用图片参数. UIImagePNGRepresentation(UIImage * image)要比UIImageJPEGPresentation(UIImage * image, 1.0)返回的图片数据量大很多,如果对图片清晰度要求不高,可以通过设置UIImageJPEGReprentation的第二个参数,大

【IOS】倒计时实现的两种方法

方法1:使用NSTimer来实现 主要使用的是NSTimer的scheduledTimerWithTimeInterval方法来每1秒执行一次timeFireMethod函数,timeFireMethod进行倒计时的一些操作,完成时把timer给invalidate掉就ok了,代码如下: 1 secondsCountDown = 60;//60秒倒计时 2 countDownTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self

iOS截取视频缩略图的两种方法

前言: 看完了使用MPMoviePlayerController播放在线视频,在实际应用中有时候需要获取视频的缩略图,我们来看看如何截取指定时间内的视频缩略图. 一  使用MPMoviePlayerController自带的方法 - (void)requestThumbnailImagesAtTimes:(NSArray *)playbackTimes timeOption:(MPMovieTimeOption)option NS_AVAILABLE_IOS(3_2); /** * 视频截图 *

ios图片拉伸两种方法

ios图片拉伸两种方法 UIImage *image = [UIImage imageNamed:@"qq"]; 第一种: // 左端盖宽度 NSInteger leftCapWidth = image.size.width * 0.5f; // 顶端盖高度 NSInteger topCapHeight = image.size.height * 0.5f; // 重新赋值 image = [image stretchableImageWithLeftCapWidth:leftCapW

css:图标与文字对齐的两种方法

(好久没写博客了,这几个月的积累比较零碎,记在本子上,现在开始整理归类) 在平时写页面的过程中,常遇到要把小图标与文字对齐的情况.比如: 总结了两种方法,代码量都比较少. 第一种 对img设置竖直方向对齐为middle, <div> <img src="" class="heart"> <span>1169</span> <img src="" class="comment"

IOS发送Email的两种方法

IOS系统框架提供的两种发送Email的方法:openURL 和 MFMailComposeViewController.借助这两个方法,我们可以轻松的在应用里加入如用户反馈这类需要发送邮件的功能. 1.openURL 使用openURL调用系统邮箱客户端是我们在IOS3.0以下实现发邮件功能的主要手段.我们可以通过设置url里的相关参数来指定邮件的内容,不过其缺点很明显,这样的过程会导致程序暂时退出.下面是使用openURL来发邮件的一个小例子: #pragma mark - 使用系统邮件客户