码迷,mamicode.com
首页 > 其他好文 > 详细

CALayer与UIView

时间:2015-11-23 06:13:12      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

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属性值不是乱写的.苹果文档中给了相关的属性.

CALayer与UIView

标签:

原文地址:http://www.cnblogs.com/JL-609/p/4987259.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!