修改UIView的默认Layer后,修改View的值会动态修改Layer的值

效果图:

如上图所示,当我们修改了一个UIView的子类中的Layer内置类型时(如上图中我们将CALayer直接替换成了CAGradientLayer类),会直接作用到其内置的Layer当中.

我们可以用这个特性将Layer封装到View当中,然后直接修改view就能达到我们想要实现的目的.

源码:

  1. //
  2. // AlphaView.h
  3. // YXMWeather
  4. //
  5. // Created by XianMingYou on 15/2/20.
  6. // Copyright (c) 2015年 XianMingYou. All rights reserved.
  7. //
  8.  
  9. #import <UIKit/UIKit.h>
  10.  
  11. @interface AlphaView : UIView
  12.  
  13. @property (nonatomic, strong) NSArray *colors;
  14. @property (nonatomic, strong) NSArray *locations;
  15. @property (nonatomic) CGPoint startPoint;
  16. @property (nonatomic) CGPoint endPoint;
  17.  
  18. - (void)alphaType;
  19.  
  20. @end
  1. //
  2. // AlphaView.m
  3. // YXMWeather
  4. //
  5. // Created by XianMingYou on 15/2/20.
  6. // Copyright (c) 2015年 XianMingYou. All rights reserved.
  7. //
  8.  
  9. #import "AlphaView.h"
  10.  
  11. @interface AlphaView ()
  12.  
  13. {
  14. CAGradientLayer *_gradientLayer;
  15. }
  16.  
  17. @end
  18.  
  19. @implementation AlphaView
  20.  
  21. /**
  22. * 修改当前view的backupLayer为CAGradientLayer
  23. *
  24. * @return CAGradientLayer类名字
  25. */
  26. + (Class)layerClass {
  27. return [CAGradientLayer class];
  28. }
  29.  
  30. - (instancetype)initWithFrame:(CGRect)frame {
  31. self = [super initWithFrame:frame];
  32. if (self) {
  33. _gradientLayer = (CAGradientLayer *)self.layer;
  34. }
  35. return self;
  36. }
  37.  
  38. - (void)alphaType {
  39. self.colors = @[[UIColor clearColor], [UIColor blackColor], [UIColor clearColor]];
  40. self.locations = @[@(0.25), @(0.5), @(0.75)];
  41. self.startPoint = CGPointMake(, );
  42. self.endPoint = CGPointMake(, );
  43. }
  44.  
  45. /**
  46. * 重写setter,getter方法
  47. */
  48. @synthesize colors = _colors;
  49. - (void)setColors:(NSArray *)colors {
  50. _colors = colors;
  51.  
  52. // 将color转换成CGColor
  53. NSMutableArray *cgColors = [NSMutableArray array];
  54. for (UIColor *tmp in colors) {
  55. id cgColor = (__bridge id)tmp.CGColor;
  56. [cgColors addObject:cgColor];
  57. }
  58.  
  59. // 设置Colors
  60. _gradientLayer.colors = cgColors;
  61. }
  62. - (NSArray *)colors {
  63. return _colors;
  64. }
  65.  
  66. @synthesize locations = _locations;
  67. - (void)setLocations:(NSArray *)locations {
  68. _locations = locations;
  69. _gradientLayer.locations = _locations;
  70. }
  71. - (NSArray *)locations {
  72. return _locations;
  73. }
  74.  
  75. @synthesize startPoint = _startPoint;
  76. - (void)setStartPoint:(CGPoint)startPoint {
  77. _startPoint = startPoint;
  78. _gradientLayer.startPoint = startPoint;
  79. }
  80. - (CGPoint)startPoint {
  81. return _startPoint;
  82. }
  83.  
  84. @synthesize endPoint = _endPoint;
  85. - (void)setEndPoint:(CGPoint)endPoint {
  86. _endPoint = endPoint;
  87. _gradientLayer.endPoint = endPoint;
  88. }
  89. - (CGPoint)endPoint {
  90. return _endPoint;
  91. }
  92.  
  93. @end

修改UIView的默认Layer后,修改View的值会动态修改Layer的值的更多相关文章

  1. MySQL修改表的默认字符集和修改表字段的默认字符集

    修改表的默认字符集: ALTER TABLE table_name DEFAULT CHARACTER SET character_name; 修改表字段的默认字符集: ALTER TABLE tab ...

  2. springboot2整合logback.xml动态修改日志打印级别

    今天找bug烦到了,生产上的日志级别不能修改,非常不利于排查问题,于是想到了动态修改日志打印级别, 因为上一周把项目升级成springboot2,并且使用logback.xml管理日志打印,所以修改也 ...

  3. springboot动态修改日志级别+权限认证

    1. springboot动态修改日志级别+权限认证 1.1. 需求 网上找到的动态修改日志级别的方式,基本都是没有权限验证的,或者特地关闭权限验证,但也没给出加上验证的解决方式 修改日志等级也是一个 ...

  4. thinkphp5或3.2 php动态修改config配置文件永久保存

    thinkphp默认的参数方法只能读取,或者动态修改不能永久修改. 这是自己摸索出来的特发出来给需要的朋友(懂的朋友别笑话,功能我自己使用是没任何问题).有些参数还是保存在配置文件方便快捷!不一定所有 ...

  5. 自己动手丰衣足食之轮播图一动态修改marginTop属性实现轮播图

    引言 学习jQuery有年头了,刚开始学习时自己动手写过轮播图,放的久了以至于忘了大致思路了.现在转而做前端,抽空把jquery轮播图拿出来写一写,把各种思路都自己练习练习,这里主要使用动态修改mar ...

  6. Ubuntu16---安装mysql5.7未提示输入密码,安装后修改mysql密码默认密码

    Ubuntu16安装mysql5.7未提示输入密码,安装后修改mysql密码默认密码 mysql默认密码为空 但是使用mysql -uroot -p 命令连接mysql时,报错 ERROR 1045 ...

  7. 关于xampp默认安装后mysql/mariadb密码的修改

    关于xampp默认按照后mysql/mariadb密码的修改 默认安装的mysql/mariadb 是没有密码的 只能跳过  然后进行修改密码 /opt/lampp/bin/mysqld_safe - ...

  8. css 修改placeholder字体颜色字体大小 修改input记住账号密码后的默认背景色

     壹 ❀ 引 本来这个阶段的项目页面都是给实习生妹子做的,我只用写写功能接接数据,但这两天妹子要忙翻译,这个工作阶段也快结束了导致有点慌,只能自己把剩余的几个小页面给写了. 那么做页面的过程中,UI也 ...

  9. Zencart先生成订单后付款,类似淘宝后台修改订单价格

    Zencart 使用 Paypal 付款,会出现漏单的情况,即 paypal 已经收到客户的付款,但是网站后台没有客户的订单.导致 paypal 漏单的原因大致会是当客户跳转到Paypal 网站付款完 ...

随机推荐

  1. jdk1.8以前不建议使用其自带的Base64来加解密

    JDK1.8之前的base64是内部测试使用的代码,不建议生产环境使用,而且未来可能会移除, JDK1.8提供最新可以正式使用的Base64类, 不要使用JDK中自带的sun.misc.BASE64D ...

  2. WPF中List的Add()与Insert()方法的区别

    先来看看定义: // Summary: // Adds an object to the end of the System.Collections.Generic.List<T>. // ...

  3. sublime text 2+sublimeClang

    sublimeClang 是github上面的开源项目,可用于C/C++的自动补全 github:https://github.com/quarnster/SublimeClang 配置sublime ...

  4. 字符的二进制,php的pack与unpack

    $curl = curl_init (); curl_setopt($curl, CURLOPT_URL , 'http://mh.18touch.com/restful/magic'); curl_ ...

  5. 安装和使用mongodb

    环境: Ubuntu 13.04 安装MongoDB $sudo apt-get install mongodb 会自动安装libpcrecpp0 libboost-system1.42.0 libb ...

  6. HTTPS 接入优化建议

      随着网络安全的普及成为共识,部署SSL证书完成HTTPS加密的站点 也随之增多.HTTPS加密能够带来的对身份验证及信息加密等诸多好处,不过想要HTTPS协议发挥更加完美的作用也需要开发者在相应环 ...

  7. Java中的数据验证

    原文链接:https://www.cuba-platform.com/blog/2018-10-09/945 翻译:CUBA China CUBA-Platform 官网 : https://www. ...

  8. c#基础学习(0806)之抽象类实现多态

    首先,要判断是否使用抽象类,可以从下面两个方面进行判断: 1.是不是需要被实例化 2.父类中有没有默认的实现 如果不需要被实例化,父类中没有默认的实现,则用抽象类(否则用虚方法来实现) 下面举个简单的 ...

  9. 在C#使用文件监控对象FileSystemWatcher 实现数据同步

    最近在项目中有这么个需求,就是得去实时获取某个在无规律改变的文本文件中的内容.首先想到的是用程序定期去访问这个文件,因为对实时性要求很高,间隔不能超过1S,而且每次获取到文本内容都要去分发给WEB服务 ...

  10. angularjs 从外部改变controller内的数据

    var appElement = document.querySelector('[ng-controller=seatsCtrl]'); var $scope = angular.element(a ...