修改UIView的默认Layer后,修改View的值会动态修改Layer的值
修改UIView的默认Layer后,修改View的值会动态修改Layer的值
效果图:
如上图所示,当我们修改了一个UIView的子类中的Layer内置类型时(如上图中我们将CALayer直接替换成了CAGradientLayer类),会直接作用到其内置的Layer当中.
我们可以用这个特性将Layer封装到View当中,然后直接修改view就能达到我们想要实现的目的.
源码:
- //
- // AlphaView.h
- // YXMWeather
- //
- // Created by XianMingYou on 15/2/20.
- // Copyright (c) 2015年 XianMingYou. All rights reserved.
- //
- #import <UIKit/UIKit.h>
- @interface AlphaView : UIView
- @property (nonatomic, strong) NSArray *colors;
- @property (nonatomic, strong) NSArray *locations;
- @property (nonatomic) CGPoint startPoint;
- @property (nonatomic) CGPoint endPoint;
- - (void)alphaType;
- @end
- //
- // AlphaView.m
- // YXMWeather
- //
- // Created by XianMingYou on 15/2/20.
- // Copyright (c) 2015年 XianMingYou. All rights reserved.
- //
- #import "AlphaView.h"
- @interface AlphaView ()
- {
- CAGradientLayer *_gradientLayer;
- }
- @end
- @implementation AlphaView
- /**
- * 修改当前view的backupLayer为CAGradientLayer
- *
- * @return CAGradientLayer类名字
- */
- + (Class)layerClass {
- return [CAGradientLayer class];
- }
- - (instancetype)initWithFrame:(CGRect)frame {
- self = [super initWithFrame:frame];
- if (self) {
- _gradientLayer = (CAGradientLayer *)self.layer;
- }
- return self;
- }
- - (void)alphaType {
- self.colors = @[[UIColor clearColor], [UIColor blackColor], [UIColor clearColor]];
- self.locations = @[@(0.25), @(0.5), @(0.75)];
- self.startPoint = CGPointMake(, );
- self.endPoint = CGPointMake(, );
- }
- /**
- * 重写setter,getter方法
- */
- @synthesize colors = _colors;
- - (void)setColors:(NSArray *)colors {
- _colors = colors;
- // 将color转换成CGColor
- NSMutableArray *cgColors = [NSMutableArray array];
- for (UIColor *tmp in colors) {
- id cgColor = (__bridge id)tmp.CGColor;
- [cgColors addObject:cgColor];
- }
- // 设置Colors
- _gradientLayer.colors = cgColors;
- }
- - (NSArray *)colors {
- return _colors;
- }
- @synthesize locations = _locations;
- - (void)setLocations:(NSArray *)locations {
- _locations = locations;
- _gradientLayer.locations = _locations;
- }
- - (NSArray *)locations {
- return _locations;
- }
- @synthesize startPoint = _startPoint;
- - (void)setStartPoint:(CGPoint)startPoint {
- _startPoint = startPoint;
- _gradientLayer.startPoint = startPoint;
- }
- - (CGPoint)startPoint {
- return _startPoint;
- }
- @synthesize endPoint = _endPoint;
- - (void)setEndPoint:(CGPoint)endPoint {
- _endPoint = endPoint;
- _gradientLayer.endPoint = endPoint;
- }
- - (CGPoint)endPoint {
- return _endPoint;
- }
- @end
修改UIView的默认Layer后,修改View的值会动态修改Layer的值的更多相关文章
- MySQL修改表的默认字符集和修改表字段的默认字符集
修改表的默认字符集: ALTER TABLE table_name DEFAULT CHARACTER SET character_name; 修改表字段的默认字符集: ALTER TABLE tab ...
- springboot2整合logback.xml动态修改日志打印级别
今天找bug烦到了,生产上的日志级别不能修改,非常不利于排查问题,于是想到了动态修改日志打印级别, 因为上一周把项目升级成springboot2,并且使用logback.xml管理日志打印,所以修改也 ...
- springboot动态修改日志级别+权限认证
1. springboot动态修改日志级别+权限认证 1.1. 需求 网上找到的动态修改日志级别的方式,基本都是没有权限验证的,或者特地关闭权限验证,但也没给出加上验证的解决方式 修改日志等级也是一个 ...
- thinkphp5或3.2 php动态修改config配置文件永久保存
thinkphp默认的参数方法只能读取,或者动态修改不能永久修改. 这是自己摸索出来的特发出来给需要的朋友(懂的朋友别笑话,功能我自己使用是没任何问题).有些参数还是保存在配置文件方便快捷!不一定所有 ...
- 自己动手丰衣足食之轮播图一动态修改marginTop属性实现轮播图
引言 学习jQuery有年头了,刚开始学习时自己动手写过轮播图,放的久了以至于忘了大致思路了.现在转而做前端,抽空把jquery轮播图拿出来写一写,把各种思路都自己练习练习,这里主要使用动态修改mar ...
- Ubuntu16---安装mysql5.7未提示输入密码,安装后修改mysql密码默认密码
Ubuntu16安装mysql5.7未提示输入密码,安装后修改mysql密码默认密码 mysql默认密码为空 但是使用mysql -uroot -p 命令连接mysql时,报错 ERROR 1045 ...
- 关于xampp默认安装后mysql/mariadb密码的修改
关于xampp默认按照后mysql/mariadb密码的修改 默认安装的mysql/mariadb 是没有密码的 只能跳过 然后进行修改密码 /opt/lampp/bin/mysqld_safe - ...
- css 修改placeholder字体颜色字体大小 修改input记住账号密码后的默认背景色
壹 ❀ 引 本来这个阶段的项目页面都是给实习生妹子做的,我只用写写功能接接数据,但这两天妹子要忙翻译,这个工作阶段也快结束了导致有点慌,只能自己把剩余的几个小页面给写了. 那么做页面的过程中,UI也 ...
- Zencart先生成订单后付款,类似淘宝后台修改订单价格
Zencart 使用 Paypal 付款,会出现漏单的情况,即 paypal 已经收到客户的付款,但是网站后台没有客户的订单.导致 paypal 漏单的原因大致会是当客户跳转到Paypal 网站付款完 ...
随机推荐
- jdk1.8以前不建议使用其自带的Base64来加解密
JDK1.8之前的base64是内部测试使用的代码,不建议生产环境使用,而且未来可能会移除, JDK1.8提供最新可以正式使用的Base64类, 不要使用JDK中自带的sun.misc.BASE64D ...
- WPF中List的Add()与Insert()方法的区别
先来看看定义: // Summary: // Adds an object to the end of the System.Collections.Generic.List<T>. // ...
- sublime text 2+sublimeClang
sublimeClang 是github上面的开源项目,可用于C/C++的自动补全 github:https://github.com/quarnster/SublimeClang 配置sublime ...
- 字符的二进制,php的pack与unpack
$curl = curl_init (); curl_setopt($curl, CURLOPT_URL , 'http://mh.18touch.com/restful/magic'); curl_ ...
- 安装和使用mongodb
环境: Ubuntu 13.04 安装MongoDB $sudo apt-get install mongodb 会自动安装libpcrecpp0 libboost-system1.42.0 libb ...
- HTTPS 接入优化建议
随着网络安全的普及成为共识,部署SSL证书完成HTTPS加密的站点 也随之增多.HTTPS加密能够带来的对身份验证及信息加密等诸多好处,不过想要HTTPS协议发挥更加完美的作用也需要开发者在相应环 ...
- Java中的数据验证
原文链接:https://www.cuba-platform.com/blog/2018-10-09/945 翻译:CUBA China CUBA-Platform 官网 : https://www. ...
- c#基础学习(0806)之抽象类实现多态
首先,要判断是否使用抽象类,可以从下面两个方面进行判断: 1.是不是需要被实例化 2.父类中有没有默认的实现 如果不需要被实例化,父类中没有默认的实现,则用抽象类(否则用虚方法来实现) 下面举个简单的 ...
- 在C#使用文件监控对象FileSystemWatcher 实现数据同步
最近在项目中有这么个需求,就是得去实时获取某个在无规律改变的文本文件中的内容.首先想到的是用程序定期去访问这个文件,因为对实时性要求很高,间隔不能超过1S,而且每次获取到文本内容都要去分发给WEB服务 ...
- angularjs 从外部改变controller内的数据
var appElement = document.querySelector('[ng-controller=seatsCtrl]'); var $scope = angular.element(a ...