IOS----Core Animation介绍2

原文地址:http://superman474.blog.163.com/blog/static/12066146201185755254/

Layer-Tree 结构

虽然layer的直接责任是提供可视的内容和管理动画,但是layer还作为其他layers的容器,创建一个layer结构。此篇就主要讲述layer的结构层次,以及我们如何在这结构层次中操纵layers。

1.core animation中的layer-tree和cocoa view的hierarchy相似。就像是UIView实例有superview和subviews一样,一个core Animation layer也有superlayer和sublayers。layer-tree提供了很多好处:
     复杂的界面可以有简单的layers组装而成,此避免了单一复杂的子类。
     meiyigelayer声明自己的坐标系统相对于其superlayer的坐标系统,当一个layer转换时,其sublayers跟着转换。
     一个layer-tree是动态的。当应用程序运行的时候它可以被重新配置。layer可以创建,添加作为另一个layer的sublayer,或者另外一个。然后从layer-tree上移除。

2.在views上显示layers
     core Animation没有提供一个实际用于显示layer的窗口,layers必须属于一个view。当与view配对时,view必须提供事件处理,而layers提供内容的显示。
     IOS的view 系统直接建立在core animation layer顶部,每一个UIView的实例会自动创建一个CALayer类实例,并设置它为view的layer属性的值。我们可以根据需要给view的layer添加sublayer。
     
3.在结构层次中添加和移除layers
     下面这个几个方法就是用来操纵layer-tree的通用方法
       addSublayer:      insertSublayer:atIndex:             insertSublayer:below:
       insertSublayer:above:      removeFromSuperlayer:                  replaceSublayer:with:
     缺省情况下,从一个可视的layer-tree上面插入或者删除layers时,会触发一个动画。当layer作为一个sublayer添加时,父 layer返回一个动画用KCAOnOrderIn标识被触发。当一个layer被删除,父layer动画标记为KCAOnOraderOut被触发,当 更换一个layer,父layer标记为KCATransition的动画被触发返回。在操纵layer-tree时,可以禁用这些动画,或者使用任何 action identifier去改变动画。

4.重定位(repositioning)或者调整(resizing)layers
       当一个layer被创建之后,可以通过程序移动和调整layer的几何属性:frame,bounds,position,anchorPoint或者zPosition。
       如果layer的属性needsDisplayOnBoundsChan ge  为YES,layer的内容在layer bounds改变时从新绘制,即bounds改变时调用setNeedsDisplay。缺省为NO。
       缺省的改变frame,bounds,position,anchorPoint和zPosition属性会引起layer动画。
自动调整layers
       CALayer提供了一个机制用来在superlayer被移动或者调整大小时自动的去移动和调整sublayer。在大多数情况下简单的配置layer的autoresizing mask就能达到恰当的效果。
       layer的autoresizing mask是用CAAutoresizingMask常量合并的。共六个:

Layer autoresizing mask constants
上图是对于mac ox下面的坐标,ios下面的稍微不同。
    上图中,当那一个变量被移除,则在哪个地方layer保持固定。
一个CALayer的子类可以覆盖resizeSublayersWithOldSi ze:和resizeWithOldSuperlayerS ize:去自定义layer的autoresizeing行为。当一个layer的bounds属性改变时,resizeSublayersWithOldSi ze:方法会被自动的调用,并给每一个sublayer发送resizeWithOldSuperlayerS ize:消息。

     5.剪裁sublayers
      Example Values of the masksToBounds property
和UIView一样, masksToBounds 属性缺省为NO。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值