iOS文字渐变色效果的实现方法

照例先上文字渐变的效果图

实现思路如下

一、创建一个颜色渐变层,渐变图层跟文字控件一样大。

二、用文字图层裁剪渐变层,只保留文字部分,就会让渐变层只保留有文字的部分,相当于间接让渐变层显示文字,我们看到的其实是被裁剪过后,渐变层的部分内容。

注意:如果用文字图层裁剪渐变层,文字图层就不在拥有显示功能,这个图层就被弄来裁剪了,不会显示,在下面代码中也会有说明。

2.1 创建一个带有文字的label,label能显示文字。

2.2 设置渐变图层的mask为label图层,就能用文字裁剪渐变图层了。

三、mask图层工作原理:

1.根据透明度进行裁剪,只保留非透明部分,显示底部内容。

示例代码如下

// 创建UILabel
  UILabel *label = [[YZLabel alloc] init];

  label.text = @"小码哥,专注于高级iOS开发工程师的培养";

  [label sizeToFit];

  label.center = CGPointMake(200, 100);  // 疑问:label只是用来做文字裁剪,能否不添加到view上。
  // 必须要把Label添加到view上,如果不添加到view上,label的图层就不会调用drawRect方法绘制文字,也就没有文字裁剪了。
  // 如何验证,自定义Label,重写drawRect方法,看是否调用,发现不添加上去,就不会调用
  [self.view addSubview:label];  // 创建渐变层
  CAGradientLayer *gradientLayer = [CAGradientLayer layer];

  gradientLayer.frame = label.frame;  // 设置渐变层的颜色,随机颜色渐变
  gradientLayer.colors = @[(id)[self randomColor].CGColor, (id)[self randomColor].CGColor,(id)[self randomColor].CGColor];  // 疑问:渐变层能不能加在label上
  // 不能,mask原理:默认会显示mask层底部的内容,如果渐变层放在mask层上,就不会显示了

  // 添加渐变层到控制器的view图层上
  [self.view.layer addSublayer:gradientLayer];  // mask层工作原理:按照透明度裁剪,只保留非透明部分,文字就是非透明的,因此除了文字,其他都被裁剪掉,这样就只会显示文字下面渐变层的内容,相当于留了文字的区域,让渐变层去填充文字的颜色。
  // 设置渐变层的裁剪层
  gradientLayer.mask = label.layer;  // 注意:一旦把label层设置为mask层,label层就不能显示了,会直接从父层中移除,然后作为渐变层的mask层,且label层的父层会指向渐变层,这样做的目的:以渐变层为坐标系,方便计算裁剪区域,如果以其他层为坐标系,还需要做点的转换,需要把别的坐标系上的点,转换成自己坐标系上点,判断当前点在不在裁剪范围内,比较麻烦。

  // 父层改了,坐标系也就改了,需要重新设置label的位置,才能正确的设置裁剪区域。
  label.frame = gradientLayer.bounds;  // 利用定时器,快速的切换渐变颜色,就有文字颜色变化效果
  CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(textColorChange)];

  [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];  // 随机颜色方法
  -(UIColor *)randomColor{        CGFloat r = arc4random_uniform(256) / 255.0;        CGFloat g = arc4random_uniform(256) / 255.0;        CGFloat b = arc4random_uniform(256) / 255.0;        return [UIColor colorWithRed:r green:g blue:b alpha:1];
  }  // 定时器触发方法
  -(void)textColorChange {
     _gradientLayer.colors = @[(id)[self randomColor].CGColor,
                  (id)[self randomColor].CGColor,
                  (id)[self randomColor].CGColor,
                  (id)[self randomColor].CGColor,
                (id)[self randomColor].CGColor];
  }

总结

以上就是ios文字渐变色实现方法的全部内容,怎么样?实现的效果还是不错的吧,而且文中的代码给出了详细的解释。希望这篇文章对各位iOS开发者们能有所帮助,如果有疑问大家可以留言交流。

(0)

相关推荐

  • iOS中利用CAGradientLayer绘制渐变色的方法实例

    前言 以前不用自己切图,现在要自己切图,看到设计稿有好多不同规格的渐变色的背景,一个一个切的话好麻烦,没有想到iOS本来就可以实现渐变色.也就是今天的主角CAGradientLayer. 渐变色使用的类是CAGradientLayer,有两个要素,渐变颜色的起点和终点.渐变的颜色集合 简单示例: //设置渐变颜色 CAGradientLayer *gradientLayer = [CAGradientLayer layer]; gradientLayer.frame = view.bounds;

  • iOS中Navbar设置渐变色效果的方法示例

    本文主要给大家介绍了关于iOS中Navbar设置渐变色效果的相关内容,分享出来供大家参考学习,下面来看看详细的介绍吧. 设置渐变色 #import "NavigationViewController.h" #define LBColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0] @interface NavigationViewController () @end

  • iOS Label实现文字渐变色效果

    前言 前一段时间公司有需求做文字的的渐变色,自己当时也是网上看了一些,自己写了两个方法,实现了需求,写了很久了,只是现在才想起来,就当继续学习了.分享出来供大家参考学习,下面来看看详细的介绍: 先看看简单的: - (void)addGradientRampWithColors:(NSArray *)colors text:(NSString *)text { //label在父视图上的(x,y)的值不是中心点 CGPoint point = CGPointMake(30, 500); UILab

  • iOS渐变圆环旋转动画CAShapeLayer CAGradientLayer

    iOS渐变圆环旋转动画CAShapeLayer CAGradientLayer shape.gif demo.png - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. CALayer *layer = [CALayer layer]; layer.backgroundColor = [UIColor redColor

  • iOS文字渐变色效果的实现方法

    照例先上文字渐变的效果图 实现思路如下 一.创建一个颜色渐变层,渐变图层跟文字控件一样大. 二.用文字图层裁剪渐变层,只保留文字部分,就会让渐变层只保留有文字的部分,相当于间接让渐变层显示文字,我们看到的其实是被裁剪过后,渐变层的部分内容. 注意:如果用文字图层裁剪渐变层,文字图层就不在拥有显示功能,这个图层就被弄来裁剪了,不会显示,在下面代码中也会有说明. 2.1 创建一个带有文字的label,label能显示文字. 2.2 设置渐变图层的mask为label图层,就能用文字裁剪渐变图层了.

  • iOS简单抽屉效果的实现方法

    本文实例为大家分享了iOS实现简单抽屉效果的具体代码,供大家参考,具体内容如下 实现思路及步骤: 1.首先准备要滑动的view #warning 第一步 - (void)addChildView {     // left     UIView *leftView = [[UIView alloc] initWithFrame:self.view.bounds];     leftView.backgroundColor = [UIColor greenColor];     [self.vie

  • IOS代码笔记之文字走马灯效果

    本文实例为大家分享了IOS文字走马灯效果具体实现代码,供大家参考,具体内容如下 一.效果图 二.工程图  三.代码 RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIViewController @end RootViewController.m #import "RootViewController.h" #import "UXLabel.h"

  • iOS 按钮上的文字添加下划线的方法

    问题:实现下图中右侧的按钮文字效果 方法: [MyTools createMyImageview:topEditView frame:CGRectMake(widthAll-90, 12, 17, 16) imageName:@"离线课程_下载更多.png"]; UIButton *downMoreButton = [MyTools createMyBtn:@"下载更多" frame:CGRectMake(widthAll-70, 10, 60, 20) uivie

  • iOS 屏幕解锁文字动画效果

    CAGradientLayer相信大家都比较熟悉,关于其如何使用,我就不在这里废话了,网上有很多介绍,想详细了解的话,可以去看看.我只简单说下如何利用CAGradientLayer制作屏幕解锁文字动画效果. 1.创建一个CAGradientLayer对象gradLayer,设置它的frame和label.bounds一样(这里要注意一下是Label的bounds不是frame); 2.这里我给gradLayer.colors一共设置了三个颜色值,首尾颜色透明度设置成0.3,中间的颜色值透明度保持

  • iOS实现知乎和途家导航栏渐变的文字动画效果

    效果图如下 分析如下: 1.导航栏一开始是隐藏的,随着scrollView滚动而渐变 2.导航栏左右两边的navigationItem是一直显示的 3.导航栏参考了途家app,使用了毛玻璃效果,背景是一张图片 4.下拉放大图片效果 5.title文字动画效果 通过简单分析,系统的导航栏实现以上效果有点困难,直接自定义一个假的导航栏更容易点 分布拆解实现以上效果 一.下拉放大header图片 - (void)viewDidLoad { [super viewDidLoad]; [self.view

  • JS实现文字放大效果的方法

    本文实例讲述了JS实现文字放大效果的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"

  • input 标签实现输入框带提示文字效果(两种方法)

    方法一:html5配合css3实现带提示文字的输入框(摆脱js): webkit特有的一个css,可以控制里面的文字样式,配合css3的动画效果和伪类,我们就可以很容易做出一个带动画的输入框,在系统登录.搜索等位置很适合,感兴趣的你可以参考下本文或许可以帮助到你,Webkit作为载体开发系统,当然需要大量使用Html5与CSS3,不仅减少大量的JS还可以保证更流畅. 当选中对话框后,提示文字变浅色,输入后消失.这个现在通行的做法是在Input标签后面增加一个Label.使用JS控制. HTML5

随机推荐