动画—CALayer的初步学习一:CALayer属性—隐式动画(学会从博客上自学)
来源:互联网 发布:软考 数据库系统工程师 编辑:程序博客网 时间:2024/06/06 18:29
在此先贴上我学习的参考博客:http://www.cnblogs.com/kenshincui/p/3972100.html
CALayer基本介绍:
在iOS中CALayer的设计主要是了为了内容展示和动画操作,CALayer本身并不包含在UIKit中,它不能响应事件。由于CALayer在设计之初就考虑它的动画操作功能,CALayer很多属性在修改时都能形成动画效果,这种属性称为“隐式动画属性”。但是对于UIView的根图层而言属性的修改并不形成动画效果,因为很多情况下根图层更多的充当容器的做用,如果它的属性变动形成动画效果会直接影响子图层。另外,UIView的根图层创建工作完全由iOS负责完成,无法重新创建,但是可以往根图层中添加子图层或移除子图层。
我的理解为以下几点:1.CALayer不能响应事件 2.CALayer很多属性在修改时都能形成动画效果,这种属性还有一个名字——“隐式动画属性” 3.CALayer的根图层而言,属性的修改不能形成动画 4.UIView的根图层无法重新创建,但是可以添加(删除)子图层
下表列出了CALayer常用的属性: 属性 说明 是否支持隐式动画
//// KCMainViewController.m// CALayer//// Created by Kenshin Cui on 14-3-22.// Copyright (c) 2014年 Kenshin Cui. All rights reserved.//#import "KCMainViewController.h"#define WIDTH 50@interface KCMainViewController ()@end@implementation KCMainViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self drawMyLayer];}#pragma mark 绘制图层-(void)drawMyLayer{ CGSize size=[UIScreen mainScreen].bounds.size; //获得根图层 CALayer *layer=[[CALayer alloc]init]; //设置背景颜色,由于QuartzCore是跨平台框架,无法直接使用UIColor layer.backgroundColor=[UIColor colorWithRed:0 green:146/255.0 blue:1.0 alpha:1.0].CGColor; //设置中心点 layer.position=CGPointMake(size.width/2, size.height/2); //设置大小 layer.bounds=CGRectMake(0, 0, WIDTH,WIDTH); //设置圆角,当圆角半径等于矩形的一半时看起来就是一个圆形 layer.cornerRadius=WIDTH/2; //设置阴影 layer.shadowColor=[UIColor grayColor].CGColor; layer.shadowOffset=CGSizeMake(2, 2); layer.shadowOpacity=.9; //设置边框// layer.borderColor=[UIColor whiteColor].CGColor;// layer.borderWidth=1; //设置锚点// layer.anchorPoint=CGPointZero; [self.view.layer addSublayer:layer];}#pragma mark 点击放大-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ UITouch *touch=[touches anyObject]; CALayer *layer=self.view.layer.sublayers[0]; CGFloat width=layer.bounds.size.width; if (width==WIDTH) { width=WIDTH*4; }else{ width=WIDTH; } layer.bounds=CGRectMake(0, 0, width, width); layer.position=[touch locationInView:self.view]; layer.cornerRadius=width/2;}@end
于是,我在if(width== WIDTH)和else两个地方设置了断点,并且打印了width的值,打印了self.view.layer.sublayers:也就是所有儿子,我发现一个奇怪的问题,width为0,这很奇怪,而且self.view.sublayers有三个对象,这就让我想要测试一下,我把self.view.layer.sublayers[0]中的0变成1,2试了一试,发现http://blog.csdn.net/wscqqlucy/article/details/84432362有反应。这个是我的一个疑问,self.view.layer 我就add了一个layer啊,所以他自己应该也有layer,哪是那些layer呢?
于是看了另一个博客:http://blog.csdn.net/wscqqlucy/article/details/8443236 ,看了好久看到这么一句话:
当你用 addSublayer 来添加一个子图层时,他会被添加到图层层次结构的顶层,所以他会显示在现有所有子图层的最前面。用一组名为 insertSublayer 的替代方法,你可以将新视图插入现有的图层之间。
这个说明没有加layer的时候,他自己就有两个layer,所以add 自己创建的这个layer的时候,这个layer变成了最外面的这个。至于这两个到底是哪两个,我敢肯定的是其中一个肯定是self.view.layer。
这段代码是动态改变了layer属性中的bounds和position,是“隐身动画属性”。
- 动画—CALayer的初步学习一:CALayer属性—隐式动画(学会从博客上自学)
- 动画—CALayer的初步学习二:CALayer绘图—通过代理方法绘图(学会从博客上自学)
- 动画—CALayer的初步学习三:CALayer绘图—通过代理方法绘图扩展1.2(带阴影效果的绘图和图层的形变)(学会从博客上自学)
- CALayer简介 (七)CALayer的隐式动画属性
- 动画—CALayer的初步学习四:CALayer绘图—使用自定义图层绘图
- CALayer的动画属性
- iOS开发UI篇—CAlayer层的属性(layer的隐式动画)
- CALayer的隐式动画
- CALayer 的隐式动画
- CALayer常用属性,隐式动画
- iOS —— CALayer 层的属性及隐式动画
- iOS开发UI篇—CAlayer层的属性(position、anchorPoint) 和隐式动画
- calayer动画总结(一)
- CALayer可动画属性
- CALayer的隐式动画实例 - 钟表
- iOS CALayer 隐式动画
- iOS CALayer隐式动画
- XMG CALayer隐式动画
- 表单元素汇总
- spring事务默认运行时异常回滚,RuntimeException
- 什么是产品的流程图?看完你就懂了
- <香港科技大学html+css+js课堂笔记>week3--DOM模型基础
- Shell中的函数调用
- 动画—CALayer的初步学习一:CALayer属性—隐式动画(学会从博客上自学)
- adb命令
- Android 图片压缩
- 理解Tomcat的WebappClassLoader(web应用类加载器)
- Java单例模式解析
- SQL语句删除数据库表中重复数据
- spring ioc原理(看完后大家可以自己写一个spring)
- mysql的用户管理
- 猜年龄-第五届