layer层次
Core Animation的基本使用(十六)
发表于2013/08/25由juluren
layer tree
addSublayer:
将层追加到接受者的子层数组中。
insertSublayer:atIndex:
将层插入到接收者指定的索引位置作为子层。
insertSublayer:below:
将层插入到接受者的子层数组中,位于指定子层的下面。
insertSublayer:above:
将层插入到接受者的子层数组中,位于指定子层的上面。
removeFromSuperlayer
将接收者从子层数组中或者接收者超层的mask属性中移出。
replaceSublayer:with:
用新层替换接收者的子层数组中的层。
你也可以用层的数组设置子层,只要设置超层的sublayers属性。当用层对象的数组设置sublayer属性时,必须确保这些层的superlayer被置为nil。
默认情况下,从一个可见的层树中插入或移出层会出发动画。当层被作为子层添加,父层返回标识为kCAOrderIn动作的动画被触发。当从层的子层中移除一 个层时,父层返回kCAOrderOut动作标识的动画被触发。替换子层中的一个层导致父层返回kCATransition动作标识的动画被触发。你可以 在操作层树时关掉动画,或者用任何动作标识改变动画。
当你使用addSublayer来添加一个子层的是,在把这个子层添加到父层层结构的最上层。所以它将会显示在任何现有层的上面。使用 insertSublayer方法可以再层结构中插入层。
要在一个特殊的索引里面插入层,可以使用atIndex 参数。
[ rootLayer insertSublayer: layer1 atIndex: 1 ];
要在另一个层的上面或者下面插入层,可以使用above 或者 below 参数
[ rootLayer insertSublayer: layer1 below:layer2 ];
[ rootLayer insertSublayer: layer1 above:layer2 ];
要把一个层从父层中删除,可以调用此层的removeFromSuperlayer来删除。
[ layer1 removeFromSuperlayer ];
要用一个不同的层来替换一个已存在的层,可以使用replaceSublayer方法。
[ rootLayer replaceSublayer: layer2 with: layer3 ];
要把一个层留在父层的层结构中,但是不显示它,可以使用层的hidden属性。你可以使用下面的代码来隐藏HUDView显示的内容,而不用去删除它。
– (void) ToggleHUD {
layer1.hidden = (layer2.hidden == NO) ? YES : NO;
}
当rootLayer物体在屏幕上显示时,所有所有sublayer层将合并渲染。每类负责自己的层,但是当rootLayer被画到屏幕上的时候,所有layer将合并在一起。
该rootLayer不是可以唯一添加的层。子层可以有自己的子层,这样整个有层次的体系才能被建立。例如,你可以向layer1增加一个层,来显示 下层的组件。例如一个团队的标志。
对层重新定位和调整大小
在层被创建后,你可以移动和调整他的大小,只需简单的改变层的几何属性:frame,bounds,position或者zPosition。
如果一个层的needsDisplayOnBoundsChange属性为YES,当层的bounds改变时层的内容将会被重新缓存。默认情况下,needsDisplayOnBoundsChange属性是NO。
默认情况下,设置frame,bounds,position,anchorPoint和zPosition属性,会让层以动画方式改变到新值。
example:
// Create the tach’s background layer
tachLayer = [CALayer layer];
tachLayer.bounds = CGRectMake(0, 0, 250, 250);
tachLayer.position = CGPointMake(200, 500);
tachLayer.contents = (id)[UIImage imageNamed:@"speed.png"].CGImage;
CALayer *L1 = [CALayer layer];
L1.frame = CGRectMake(0, 0, 100, 100);
UIColor *c1 = [UIColor redColor];
L1.name = @"L1";
[L1 setBackgroundColor:(c1.CGColor)]; // 因为layer setBackgroundColor用到的是CGColor所以要进行一次转换
CALayer *L2 = [CALayer layer];
L2.frame = CGRectMake(50, 50, 100, 100);
UIColor *c2 = [UIColor blueColor];
L2.name = @"L2";
[L2 setBackgroundColor:(c2.CGColor)];
CALayer *L3 = [CALayer layer];
L3.frame = CGRectMake(50, 0, 100, 100);
UIColor *c3 = [UIColor greenColor];
L3.name = @"L3";
[L3 setBackgroundColor:(c3.CGColor)];
CALayer *L4 = [CALayer layer];
L4.frame = CGRectMake(0, 50, 100, 100);
UIColor *c4 = [UIColor grayColor];
L4.name = @"L4";
[L4 setBackgroundColor:(c4.CGColor)];
[self.view.layer addSublayer:tachLayer];
//以上是基本的Layer设定,下面是操作subLayer的例子
[ tachLayer addSublayer: L2];
[ tachLayer addSublayer: L1];
[ tachLayer insertSublayer: L2 atIndex: 1 ];
[ tachLayer insertSublayer: L1 atIndex: 2 ];
[ tachLayer insertSublayer: L2 atIndex: 3 ];
[ tachLayer insertSublayer: L3 atIndex: 1 ];
[ tachLayer insertSublayer: L4 atIndex: 0 ];
[ tachLayer addSublayer: L2];
执行到此的效果
L2.name = @"L2A";
[ tachLayer addSublayer: L2];
[ tachLayer insertSublayer: L3 atIndex: 0.7 ];
[ tachLayer insertSublayer: L2 below:L1];
[ tachLayer insertSublayer: L3 above:L1];
[ tachLayer insertSublayer: L4 above:L1];
到此的结果
[ L1 removeFromSuperlayer ];
[ tachLayer replaceSublayer: L3 with:L4 ];
[ tachLayer replaceSublayer: L2 with:L1 ];
L4.hidden = YES;
L1.zPosition = 5;
for (CALayer *layer in tachLayer.sublayers) {
//for (int i=0;i%@",layer.name);
}
实际剩下的subLayer
2012-12-13 00:33:00.733 myTest16[66113:c07] subLayer is =>L1
2012-12-13 00:33:00.734 myTest16[66113:c07] subLayer is =>L4
layer层次的更多相关文章
- 跟我一起云计算(6)——openAPI
介绍 Open API即开放API,也称开放平台. 所谓的开放API(OpenAPI)是服务型网站常见的一种应用,网站的服务商将自己的网站服务封装成一系列API(Application Program ...
- iOS 开发--动画
在iOS开发中,制作动画效果是最让开发者享受的环节之一.一个设计严谨.精细的动画效果能给用户耳目一新的效果,吸引他们的眼光 —— 这对于app而言是非常重要的.我们总是追求更为酷炫的实现,如果足够仔细 ...
- 【转载】跟我一起云计算(6)——openAPI
http://www.cnblogs.com/skyme/p/3435565.html 介绍 Open API即开放API,也称开放平台. 所谓的开放API(OpenAPI)是服务型网站常见的一种应用 ...
- UIView的动画之初步学习
animateWithDuration:<#(NSTimeInterval)#> delay:<#(NSTimeInterval)#> options:<#(UIView ...
- CSS–Some Structure
Some Structure About CSS Layout Position,Layer[层次] Box Model Visual Formatting Model BFC[block forma ...
- Core Animation 文档翻译 (第一篇)
Core Animation 文档翻译(第一篇) 2018-01-13 星期6 前言:作为iOS 开发,官方文档的阅读是很有必要的,值此周末便写下此文.作为iOS 实际经验3年的开发,之前的应用 ...
- Core Animation文档翻译 (第一篇)
Core Animation 文档翻译(第一篇) 前言 作为iOS 开发,官方文档的阅读是很有必要的,值此周末便写下此文.作为iOS 实际经验3年的开发,之前有阅读并实践过经典的<iOS核心动画 ...
- Core Animation 文档翻译 (第二篇)
Core Animation 文档翻译 (第二篇) 核心动画基础要素 核心动画为我们APP内Views动画和其他可视化元素动画提供了综合性的实现体系.核心动画不是我们APP内Views的替代品,相反, ...
- Core Animation 文档翻译 (第五篇)
构建Layer层次结构 在APP中大多数情况下,将Layer和View对象结合使用是Layer最好的使用方式.然而,很多时候我们可能需要通过添加单独的Layer对象,以便增加视图继承层次:当为了提 ...
随机推荐
- 基于ANDROID平台,U3D对蓝牙手柄键值的获取
对于ANDROID平台,物理蓝牙手柄已被封装,上层应用不可见,也就是说对于上层应用,不区分蓝牙手柄还是其它手柄: 完成蓝牙手柄和ANDROID手机的蓝牙连接后,即可以UNITY3D中获取其键值: 在U ...
- 第二类Stirling数初探 By cellur925
上午noi.ac崩崩崩了,栽在组合数学上,虽说最后在辰哥&Chemist的指导下A掉了此题,也发现自己组合数学太弱了qwq. 在luogu上找题,结果找到了一个第二类斯特林数的题(还是双倍经验 ...
- hdu6201 transaction transaction transaction(from 2017 ACM/ICPC Asia Regional Shenyang Online)
最开始一直想着最短路,不过看完题解后,才知道可以做成最长路.唉,还是太菜了. 先上图: 只要自己添加两个点,然后如此图般求最长路即可,emmm,用SPFA可以,迪杰斯特拉也可以,或者别的都ok,只要通 ...
- 福建工程学院第七届ACM程序设计新生赛 (同步赛)
A.关电脑 #include<bits/stdc++.h> using namespace std; typedef long long LL; int T,h1,m1,s1,h2,m2, ...
- angular 2 angular quick start Could not find HammerJS
Angular2 的material中 引用了 hammerjs,遇到Could not find HammerJS错误,正确的步骤如下: 需要在如下位置增加 对material 和 hammerjs ...
- Hadoop调度框架
大数据协作框架是一个桐城,就是Hadoop2生态系统中几个辅助的Hadoop2.x框架.主要如下: 1,数据转换工具Sqoop 2,文件搜集框架Flume 3,任务调度框架Oozie 4,大数 ...
- AJPFX总结Collection集合(上)
出现集合类的原因 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一个方式. 数组和集合都是容器有何不同? 数组虽也可存储对象,但长度 ...
- SpringBoot 2.x (8):模板引擎
SpringBoot中有很多的starter:本质是多个JAR包集合 比如我们常用的: <dependency> <groupId>org.springframework.bo ...
- UVa OJ 494
Kindergarten Counting Game Everybody sit down in a circle. Ok. Listen to me carefully. ``Woooooo, ...
- 严重 [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start:解决
严重 [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.core.ContainerBase.addChildInternal Contain ...