CoreAnimation —— Layer
2016-11-28 00:00
225 查看
一、所有的UIView或者UIView的子类都有一个Layer,每个UIView中的Layer也是分层的,Layer主要负责视图的展示,而UIView更多的处理一系列的事件。ios中所有的动画都是由Layer来完成的(通过UIView的layer属性可以访问这个层@property(nonatomic,readonly,retain) CALayer *layer;)。
常用的方法:
图层的坐标系:
CALayer有两个重要的属性:position(坐标)和anchorPoint(锚点)
Layer的其他作用:
二、系统的layer
CALayer的属性 // 宽度和高度 @property CGRect bounds; /* 位置(默认指中点,具体由anchorPoint决定) 用来设置CALayer在父层中的位置 以父层的左上角为原点(0, 0) */ @property CGPoint position; /* 锚点(x,y的范围都是0-1),决定了position的含义 称为“定位点”、“锚点” 决定着CALayer身上的哪个点会在position属性所指的位置 以自己的左上角为原点(0, 0) 它的x、y取值范围都是0~1,默认值为(0.5, 0.5) */ @property CGPoint anchorPoint; //设置其在父layer中的层次,默认为0,这个值越大,层次越靠上 @property CGFloat zPosition; // 背景颜色(CGColorRef类型) @property CGColorRef backgroundColor; // 形变属性 @property CATransform3D transform; //在Z轴上的锚点位置 3D变换时会有很大影响 @property CGFloat anchorPointZ; // 边框颜色(CGColorRef类型) @property CGColorRef borderColor; // 边框宽度 @property CGFloat borderWidth; // 圆角半径 @property CGColorRef borderColor; // 内容(比如设置为图片CGImageRef) @property(retain) id contents; //获取内容的rect尺寸 @property CGRect contentsRect; //设置内容的填充和对其方式,具体上面有说 @property(copy) NSString *contentsGravity; //设置内容的缩放 @property CGFloat contentsScale; //设置背景颜色 @property(nullable) CGColorRef backgroundColor; //设置圆角半径 @property CGFloat cornerRadius; //设置边框宽度 @property CGFloat borderWidth; //设置边框颜色 @property(nullable) CGColorRef borderColor; //设置透明度 @property float opacity; //设置阴影颜色 @property(nullable) CGColorRef shadowColor; //设置阴影透明度 @property float shadowOpacity; //设置阴影偏移量 @property CGSize shadowOffset; //设置阴影圆角半径 @property CGFloat shadowRadius; //设置阴影路径 @property(nullable) CGPathRef shadowPath; //设置内容是否完全不透明 @property(getter=isOpaque) BOOL opaque; /* 这个属性本身也是CALayer类型,有和其他图层一样的绘制和布局属性。 它类似于一个子视图,相对于父图层(即拥有该属性的图层)布局,但是它却不是一个普通的子视图。 不同于一般的subLayer,mask定义了父图层的可见区域, 简单点说就是最终父视图显示的形态是父视图自身和它的属性mask的交集部分。 mask图层的color属性是无关紧要的,真正重要的是它的轮廓,mask属性就像一个切割机,父视图被mask切割, 相交的部分会留下,其他的部分则被丢弃。 CALayer的蒙版图层真正厉害的地方在于蒙版图层不局限于静态图,任何有图层构成的都可以作为mask属性, 这意味着蒙版可以通过代码甚至是动画实时生成。*/ @property(nullable, strong) CALayer *mask;
常用的方法:
//重新加载绘制内容 - (void)display; //设置内容为需要重新绘制 - (void)setNeedsDisplay; //设置某一区域内容需要重新绘制 - (void)setNeedsDisplayInRect:(CGRect)r; //获取是否需要重新绘制 - (BOOL)needsDisplay; //如果需要,进行内容重绘 - (void)displayIfNeeded; //这个属性设置为YES,当内容改变时会自动调用- (void)setNeedsDisplay函数 @property BOOL needsDisplayOnBoundsChange; //绘制与读取内容 - (void)drawInContext:(CGContextRef)ctx; //添加一个动画对象 key值起到id的作用,通过key值,可以取到这个动画对象 - (void)addAnimation:(CAAnimation *)anim forKey:(nullable NSString *)key; //移除所有动画对象 - (void)removeAllAnimations; //移除某个动画对象 - (void)removeAnimationForKey:(NSString *)key; //获取所有动画对象的key值 - (nullable NSArray<NSString *> *)animationKeys; //通过key值获取动画对象 - (nullable CAAnimation *)animationForKey:(NSString *)key;
图层的坐标系:
CALayer有两个重要的属性:position(坐标)和anchorPoint(锚点)
CALayer *layer = [[CALayer alloc] init]; layer.bounds = CGRectMake(0, 0, 100, 100); // 紧贴红色的参考view layer.position = CGPointMake(200, 200); layer.contents = (id)[UIImage imageNamed:@"headphoto08"].CGImage; // 让layer的中心点显示在position指定的位置上 layer.anchorPoint = CGPointMake(0.5, 0.5); [self.view.layer addSublayer:layer];
Layer的其他作用:
// 设置尺寸 self.redView.layer.bounds = CGRectMake(0, 0, 100, 100); // 设置边框的宽度 self.redView.layer.borderWidth = 10; // 设置边框颜色 self.redView.layer.borderColor = [UIColor yellowColor].CGColor; // 设置背景颜色 self.redView.layer.backgroundColor = [UIColor greenColor].CGColor; // 设置圆角效果 self.redView.layer.cornerRadius = 30; // 剪掉圆角以外的部分 self.redView.layer.masksToBounds = YES; // 设置阴影的颜色 self.redView.layer.shadowColor = [UIColor redColor].CGColor; // 设置阴影的透明度 self.redView.layer.shadowOpacity = 0.5; // 阴影的位置(以redView左上角为原点) self.redView.layer.shadowOffset = CGSizeMake(100, 100); /* *1.如果你设置了masksToBounds为YES,阴影是不出,原因,阴影也被切掉了 *2.如果你想有圆角的效果,又想有阴影,图片本来就有圆角效果 *3.获取话说:自己把图片转换成有圆角的图片,再显示 */
二、系统的layer
1.CAEmitterLayer
CoreAnimation框架中的CAEmitterLayer是一个粒子发射器系统,负责粒子的创建和发射源属性。通过它,我们可以轻松创建出炫酷的粒子效果。2.CAGradientLayer
CAGradientLayer可以创建出色彩渐变的图层效果,如下:3.CAEAGLLayer
CAEAGLLayer可以通过OpenGL ES来进行界面的绘制。4.CAReplicatorLayer
CAReplicatorLayer是一个layer容器,会对其中的subLayer进行复制和属性偏移,通过它,可以创建出类似倒影的效果,也可以进行变换复制,如下:5.CAScrollLayer
CAScrollLayer可以支持其上管理的多个子层进行滑动,但是只能通过代码进行管理,不能进行用户点按触发。6.CAShapeLayer
CAShapeLayer可以让我们在layer层是直接绘制出自定义的形状。7.CATextLayer
CATextLayer可以通过字符串进行文字的绘制。8.CATiledLayer
CATiledLayer类似瓦片视图,可以将绘制分区域进行,常用于一张大的图片的分不分绘制。9.CATransformLayer
CATransformLayer用于构建一些3D效果的图层相关文章推荐
- CoreAnimation 之CAReplicatorLayer
- CoreAnimation暂停和继续Layer动画
- CoreAnimation中layer动画闪烁的原因及解决
- CoreAnimation中layer动画闪烁的原因及解决
- CoreAnimation-Layer讲解
- 【iOS提高】CoreAnimation--Layer
- CoreAnimation中layer动画闪烁的原因及解决
- CoreAnimation —— CAReplicatorLayer(拷贝图层)
- CoreAnimation-Layer详解
- CoreAnimation详解(一)有关Layer的动画
- iOS开发CoreAnimation解读之三——几种常用Layer的使用解析
- caffe 问题汇总之too many parameters specified for layer
- 貝塞爾 Layer 入門指南
- WMS GetFeatureInfo (Tile Layer)——WMS获取要素信息(瓦片图层)
- Thinkphp5结合layer弹窗定制操作结果页面
- ios CAShapeLayer 下载进度绘制
- 一张图说明softmax layer是什么
- layer 之子父窗口传值
- GIS-ArcGIS JS API FeatureLayer图层绑定事件的几种方式
- layer-list -- layer-list的基本使用介绍