CALayer与UIView

CALayer的基本属性

CALayer和UIView的关系

position和anchorPoint的作用

1.CALayer的基本属性
  • UIView之所以能显示在屏幕上,完全是因为它内部的一个图层(CALayer对象),UIView对象创建时,内部会自动创建一个图层与之相关联,通过UIView的layer属性可以访问这个层

@property(nonatomic,readonly,retain)CALayer*layer;

  • 当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘制,把所有的内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,由此完成UIView的显示。
  • UIView本身不具备显示的功能,是它内部的图层才有显示功能。   
    • CALayer的基本使用:通过操作CALayer对象,可以很方便的调整UIView的一些外观属性,比如:
    • 阴影、圆角大小、边框宽度和颜色等……
    • 还可以给图层添加动画,实现一些酷炫效果

CALayer的属性:

  宽度和高度:@propertyCGRect bounds;

  位置(默认指中点,具体由anchorPoint决定):@propertyCGPoint position;

  锚点(x,y的范围都是0-1),决定了position的含义:@propertyCGPoint anchorPoint;

  背景颜色(CGColorRef类型)@propertyCGColorRef backgroundColor;

  形变属性:@propertyCATransform3D transform;

  边框宽度:@propertyCGFloat borderWidth;

  边框颜色:@propertyCGColorRef borderColor;

  内容(比如设置为图片CGImageRef):@property(retain) id contents;

CALayer的疑点:

  • CALayer是定义在QuartzCore框架中的,CGImageRef和CGColorRef两种数据类型是定义在CoreGraphics框架中的,而UICOlor和UIImage是定义在UIKit框架中的
  • QuartzCore框架和CoreGraphics框架是可以跨平台使用的,在iOS和Mac OS X上都能使用,而UIKit只能在iOS中使用,所以为了保证移植性,QuartzCore不能使用UIImage和UIColor,只能使CGImageRef和CGColorRef
2.CALayer和UIView之间的联系

通过CALayer就能做出和UIImageView一样的界面效果;

CALayer和UIView都能实现相同的显示效果,那么究竟该选哪一个?比较如下:

a. UIView比CALayer多了一个事件处理的功能,CALayer不能处理用户的触摸事件,而UIView可以

b. 如果显示的东西需要和用户交互,用UIView;如果不需要和用户交互,用UIView和CALayer都可以

c. CALayer的性能会高一些,少了事件处理功能,更加轻量级

3.position和anchorPoint的作用

CALayer有2个非常重要的属性:

  • position:  @property CGPoint position;用来设置CALayer在父层上的位置,以父层的左上角为原点(0,0)
  • anchorPoint: @property CGPoint anchorPoint;称为“定位点”、“锚点”,决定CALayer身上的哪个点会在     position属性所指的位置,以自己的左上角为原点(0,0),x,y取值范围都是0~1,默认值是(0.5,0.5)

隐式动画:每个UIView内部都默认关联着一个CALayer,称这个Layer为Root Layer(根层),所有的非Root            Layer也就是手动创建的CALayer对象,都存在着隐式动画

隐式动画:对非Root Layer的部分属性进行修改时,默认会自动产生一些动画效果,这些属性称为Animatable     Properties(可动画属性)

几个常见的Animatable Properties:

bounds:用于设置CALayer的宽度和高度,修改这个属性会产生缩放动画

backgroundColor:用于设置CALayer的背景颜色,修改这个属性会产生背景色的渐变动画

posotion:用于设置CALayer的位置,修改这个属性会产生平移动画

可以通过动画事务(CATransaction)关闭默认的隐式动画效果;

注意:UIImageView当中Image并不是直接添加在层上面的.这是添加在layer当中的contents里.我们设置层的所有

属性,它只作用在层上面.对contents里面的东西并不起作用.所以我们看不到图片有圆角的效果.想要让图片有圆角的效果.

   可以把masksToBounds这个属性设为YES,当设为YES,把就会把超过根层以外的东西都给裁剪掉。

利用KVC对CALayer属性的操作:当需要做一些快速缩放,平移,二维的旋转时用KVC.比如: [_imageView.layer setValue:@0.5 forKeyPath:@"transform.scale"];快速的进行缩放.后面forKeyPath属性值不是乱写的.苹果文档中给了相关的属性.

时间: 2024-10-26 20:31:44

CALayer与UIView的相关文章

CALayer与UIView的区别

这篇文章主要表达的是这两个类的区别和少量的联系. 1.首先要明确的一点就是CALayer继承自NSObject,而UIView集成自NSResponder.所以UIView是可以相应用户的点击事件的,而CALayer更多的是做渲染和动画效果. 2.第二个就是CALayer和UIView都可以在屏幕上展示.有什么区别吗?当然了!每个在页面上展示的UIView都是要在自己的根layer上进行对自己的绘制的!就好比layer是画板,而view是画笔. 3.第三个就是它们两个在展示效率上并没有很大的差别

CALayer与UIView的关系

CALayer属于Core Animation部分的内容,比较重要而不太好理解.以下是园子中看到的一篇文章的摘录: 1. UIView是iOS系统中界面元素的基础,所有的界面元素都是继承自它.它本身完全是由CoreAnimation来实现的.它真正的绘图部分,是由一个CALayer类来管理.UIView本身更像是一个CALayer的管理器,访问它的跟绘图和跟坐标有关的属性,例如frame,bounds等,实际上内部都是在访问它所包含的CALayer的相关属性. 2. UIView有个重要属性la

详解CALayer 和 UIView的区别和联系

详解CALayer 和 UIView的区别和联系 1.首先UIView可以响应事件,Layer不可以. UIKit使用UIResponder作为响应对象,来响应系统传递过来的事件并进行处理.UIApplication. UIViewController.UIView.和所有从UIView派生出来的UIKit类(包括UIWindow)都直接或间接地继承自 UIResponder类. 在 UIResponder中定义了处理各种事件和事件传递的接口, 而 CALayer直接继承 NSObject,并没

IOS开发-CALayer和UIView详细汇总

1.    CALayer和UIView之间的关系: 在iOS系统中,你能看得见摸得着的东西基本上都是UIView,比如UI控件.图标等等,都是UIView. 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个层(CALayer). 在创建UIView对象时,UIView内部会自动创建一个层(即CALayer对象),通过UIView的layer属性可以访问这个层.当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的层上,绘图完毕后,系统会

CALayer 与 UIView

1.关系 On iOS, every UIView is backed by a Core Animation CALayer. Simply speaking,UIView inherit from NSResponder,handle events from users, contains CALayer,which inherit from NSObject,mainly focus on rendering,animation etc. One thing UIViews provide

CALayer和UIView

前言 本次分享将从以下方面进行展开: 曾被面试官问倒过的问题:层与视图的关系 CALayer类介绍及层与视图的关系 CAShapeLayer类介绍 UIBezierPath贝塞尔曲线讲解 CoreAnimation之动画子类介绍 CATransitionAnimation类实现各种过滤动画 关于Core Animation在iOS系统中的关系图如下: 可以看出,Core Animation是相对上层的封装,介于UIKit与Core Graphics.OpenGL/OpenGL ES之间.最底下还

CALayer和UIView的区别

转载:http://www.cnblogs.com/Twisted-Fate/p/4773544.html 1.UIKit使用UIResponder作为响应对象,来响应系统传递过来的事 件并进行处理.UIApplication.UIViewController.UIView.和所有从UIView派生出来的UIKit类(包括 UIWindow)都直接或间接地继承自UIResponder类. 在 UIResponder中定义了处理各种事件和事件传递的接口, 而 CALayer直接继承 NSObjec

UIView与CALayer的区别

今天和大家分享一下CALayer和UIView的区别: 1.UIKit使用UIResponder作为响应对象,来响应系统传递过来的事件并进行处理.UIApplication.UIViewController.UIView.和所有从UIView派生出来的UIKit类(包括UIWindow)都直接或间接地继承自UIResponder类. 在 UIResponder中定义了处理各种事件和事件传递的接口, 而 CALayer直接继承 NSObject,并没有相应的处理事件的接口,两者最明显的区别是 Vi

UIView CALayer 的区别

UIView与CALayer的区别,很详细 研究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍.苹果网站上有篇专门的总结性介绍,但是似乎原理性的东西不多,看得人云山雾罩,感觉,写那篇东西的人,其实是假设读的人了解界面动画技术的原理的.今天有点别的事情要使用Linux,忘掉了ssh的密码,没办法重新设ssh,结果怎么也想不起来怎么设ssh远程登陆了,没办法又到网上查了一遍,太浪费时间了,痛感忘记记笔记是多么可怕的事情.鉴于Core Animatio