CALayer基础
2015-12-01 03:23
447 查看
先看效果
再看代码
代码下载请猛戳这里测试一下几种控件中的layer
/** * UIView 图层测试 * * @param view 测试图层的UIView */ - (void)testViewLayer:(UIView *)view { //圆角 view.layer.cornerRadius = view.frame.size.height/2; //阴影颜色 view.layer.shadowColor = [UIColor blackColor].CGColor; //阴影偏移 view.layer.shadowOffset = CGSizeMake(2, 5); //阴影透明度 view.layer.shadowOpacity = 0.5; } /** * UIImageView 图层测试 * * @param view 测试图层的UIImageView */ - (void)testImageViewLayer:(UIView *)view { //描边 view.layer.borderColor = [UIColor redColor].CGColor; //描边宽 view.layer.borderWidth = 10; //圆角 view.layer.cornerRadius = view.frame.size.height/2; //裁剪 view.layer.masksToBounds = YES; //阴影设置 view.layer.shadowOpacity = 0.5; view.layer.shadowOffset = CGSizeMake(2, 6); view.layer.shadowColor = [UIColor blackColor].CGColor; //阴影大小 view.layer.shadowRadius = 10; } /** * UILabel 图层测试 * * @param view 测试图层的UILable */ - (void)testLabelLayer:(UIView *)view { //三维旋转 view.layer.transform = CATransform3DRotate(view.layer.transform, M_PI_4, 0, 0, 1); //三维缩放 CATransform3D transform = CATransform3DScale(view.layer.transform, 0.5, 0.5, 0.5); // 可以传递哪些key path, 在官方文档搜索 "CATransform3D key paths" [view.layer setValue:[NSValue valueWithCATransform3D:transform] forKeyPath:@"transform"]; /* 用KVC设置 */ [view.layer setValue:@(M_PI/3) forKeyPath:@"transform.rotation.x"]; [view.layer setValue:@(M_PI/3) forKeyPath:@"transform.rotation.y"]; [view.layer setValue:@(M_PI/3) forKeyPath:@"transform.rotation.z"]; [view.layer setValue:@(M_PI/3) forKeyPath:@"transform.rotation"]; [view.layer setValue:@(1.5) forKeyPath:@"transform.scale.x"]; [view.layer setValue:@(1.5) forKeyPath:@"transform.scale.y"]; [view.layer setValue:@(1.5) forKeyPath:@"transform.scale.z"]; [view.layer setValue:@(1.5) forKeyPath:@"transform.scale"]; }
CALayer隐式动画
- (void)viewDidLoad { [super viewDidLoad]; //创建图层 CALayer *layer = [CALayer layer]; //设置位置 layer.frame = CGRectMake(0, 0, 100, 100); //设置背景色 layer.backgroundColor = [UIColor redColor].CGColor; //设置位置点 layer.position = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2); //设置锚点(注意:取值在0~1之间) layer.anchorPoint = CGPointMake(0.5, 0.5); //设置描边颜色 layer.borderColor = [UIColor greenColor].CGColor; //描边宽 layer.borderWidth = 5; //圆角大小 layer.cornerRadius = 50; //阴影不透明度 layer.shadowOpacity = 1; //阴影偏移 layer.shadowOffset = CGSizeMake(2, 5); //阴影大小 layer.shadowRadius = 5; //添加到父图层 [self.view.layer addSublayer:layer]; self.layer = layer; } - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { //通过在官方文档中搜索CALayer animatable Properties查看哪些属性可以做隐式动画 //self.layer.borderWidth = 15; //如何停止隐式动画 //1.开启事务 [CATransaction begin]; //2.设置不执行动画的属性 [CATransaction setDisab ccaa leActions:YES]; //3.把动画属性放在中间 self.layer.opacity = 0; self.layer.borderWidth = 15; //4.提交事务 [CATransaction commit]; }
自定义CALayer
/* view的完整显示过程 1. view.layer会准备一个Layer Graphics Contex(图层类型的上下文) 2. 调用view.layer.delegate(view)的drawLayer:inContext:,并传入刚才准备好的上下文 3. view的drawLayer:inContext:方法内部又会调用view的drawRect:方法 4. view就可以在drawRect:方法中实现绘图代码, 所有东西最终都绘制到view.layer上面 5. 系统再将view.layer的内容拷贝到屏幕, 于是完成了view的显示 */ - (void)viewDidLoad { [super viewDidLoad]; //创建图层 CALayer *layer = [CALayer layer]; //设置位置 layer.frame = CGRectMake(0, 0, 100, 100); //设置背景色 layer.backgroundColor = [UIColor redColor].CGColor; //设置位置点 layer.position = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2); //设置锚点(注意:取值在0~1之间) layer.anchorPoint = CGPointMake(0.5, 0.5); //设置描边颜色 layer.borderColor = [UIColor greenColor].CGColor; //描边宽 layer.borderWidth = 5; //圆角大小 layer.cornerRadius = 50; //阴影不透明度 layer.shadowOpacity = 1; //阴影偏移 layer.shadowOffset = CGSizeMake(2, 5); //阴影大小 layer.shadowRadius = 5; //添加到父图层 [self.view.layer addSublayer:layer]; self.layer = layer; } - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { //通过在官方文档中搜索CALayer animatable Properties查看哪些属性可以做隐式动画 //self.layer.borderWidth = 15; //如何停止隐式动画 //1.开启事务 [CATransaction begin]; //2.设置不执行动画的属性 [CATransaction setDisableActions:YES]; //3.把动画属性放在中间 self.layer.opacity = 0; self.layer.borderWidth = 15; //4.提交事务 [CATransaction commit]; }
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- 举例详解iOS开发过程中的沙盒机制与文件
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- 分享一个iOS下实现基本绘画板功能的简单方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器