calayer 与uiview

研究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍。苹果网站上有篇专门的总结性介绍,但是似乎原理性的东西不多,看得人云山雾罩,感觉,写那篇东西的人,其实是假 设读的人了解界面动画技术的原理的。今天有点别的事情要使用Linux,忘掉了ssh的密码,没办法重新设ssh,结果怎么也想不起来怎么设ssh远程登 陆了,没办法又到网上查了一遍,太浪费时间了,痛感忘记记笔记是多么可怕的事情。鉴于Core Animation的内容实在是非常繁杂,应用的Obj-C语言本身的特性也很多,所以写个备忘录记录一下,懂的人看了后如果发现了错误,还不吝指教。

 

1.UIView是iOS系统中界面元素的基础,所有的界面元素都继承自它。它本身完全是由CoreAnimation来实现的(Mac下似乎不是 这样)。它真正的绘图部分,是由一个叫CALayer(Core Animation Layer)的类来管理。UIView本身,更像是一个CALayer的管理器,访问它的跟绘图和跟坐标有关的属性,例如frame,bounds等等, 实际上内部都是在访问它所包含的CALayer的相关属性。

 

2.UIView有个layer属性,可以返回它的主CALayer实例,UIView有一个layerClass方法,返回主layer所使用的类,UIView的子类,可以通过重载这个方法,来让UIView使用不同的CALayer来显示,例如通过

- (class) layerClass {return ([CAEAGLLayer class]);
}
使某个UIView的子类使用GL来进行绘制。

 

3.UIView的CALayer类似UIView的子View树形结构,也可以向它的layer上添加子layer,来完成某些特殊的表示。例如下面的代码

grayCover = [[CALayer alloc] init];
grayCover.backgroundColor = [[[UIColor blackColor] colorWithAlphaComponent:0.2] CGColor];
[self.layer addSubLayer: grayCover];
会在目标View上敷上一层黑色的透明薄膜。

 

4.UIView的layer树形在系统内部,被系统维护着三份copy(这段理解有点吃不准)。

第一份,逻辑树,就是代码里可以操纵的,例如更改layer的属性等等就在这一份。

第二份,动画树,这是一个中间层,系统正在这一层上更改属性,进行各种渲染操作。

第三份,显示树,这棵树的内容是当前正被显示在屏幕上的内容。

这三棵树的逻辑结构都是一样的,区别只有各自的属性。

 

5.动画的运作

UIView的主layer以外(我觉得是这样),对它的subLayer,也就是子layer的属性进行更改,系统将自动进行动画生成,动画持续 时间有个缺省时间,个人感觉大概是0.5秒。在动画时间里,系统自动判定哪些属性更改了,自动对更改的属性进行动画插值,生成中间帧然后连续显示产生动画 效果。

 

6.坐标系系统(对position和anchorPoint的关系还是犯晕)

CALayer的坐标系系统和UIView有点不一样,它多了一个叫anchorPoint的属性,它使用CGPoint结构,但是值域是0~1, 也就是按照比例来设置。这个点是各种图形变换的坐标原点,同时会更改layer的position的位置,它的缺省值是{0.5, 0.5},也就是在layer的中央。

某layer.anchorPoint = CGPointMake(0.f, 0.f);

如果这么设置,layer的左上角就会被挪到原来的中间的位置,

加上这样一句就好了

某layer.position = CGPointMake(0.f, 0.f);

 

7.真实例子的分析

2011012205344440.png

 

这是iphone上iBook翻页的效果,假设每一页都是一个UIView,我觉得一个页面是贴了俩个Layer,文字Layer显示正面的内容, 背面layer用文字layer的快照做affine翻转,贴在文字layer的后面。因为Layer可以设置显示阴影,也许后面的阴影效果没有使用单独 的一个layer来显示。至于这个曲面效果,我查了很多资料也没有结果,估计是使用了GL的曲面绘图?

 

8.最后一个让人恶心的。

layer可以设置圆角显示,例如UIButton的效果,也可以设置阴影显示,但是如果layer树中的某个layer设置了圆角,树中所有 layer的阴影效果都将显示不了了。如果既想有圆角又想要阴影,好像只能做两个重叠的UIView,一个的layer显示圆角,一个的layer显示阴 影.....

转载于:https://www.cnblogs.com/ligun123/archive/2011/09/18/2180473.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/380213.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代换-置换网络(SP网络)

0x01 概述 代换-置换网络是一系列被应用于分组密码中相关的数学运算,高级加密标准(英语:AES)、3-Way、Kuznyechik、PRESENT、SAFER、SHARK、Square都有涉用。这种加密网络使用明文块和密钥块作为输入,并通过交错的若干…

【贪心】最小生成树Kruskal算法Python实现

文章目录 [toc]问题描述最小生成树的性质证明 Kruskal算法时间复杂性Python实现 个人主页:丷从心 系列专栏:贪心算法 问题描述 设 G ( V , E ) G (V , E) G(V,E)是无向连通带权图, E E E中每条边 ( v , w ) (v , w) (v,w)的权为 c [ v ] …

HTML5 学习笔记

HTML5 学习笔记 前言 该学习笔记的相关学习视频:【狂神说Java】HTML5完整教学通俗易懂 目前笔记只有简单的例子和框架,将来在实践中会进一步学习和补充内容 目录HTML5 学习笔记前言网页基本信息网页基本标签标题标签段落标签换行标签水平线标签字体样式…

保护机制

0x01 概述 操作系统提供了许多安全机制来尝试降低或阻止缓冲区溢出攻击带来的安全风险,包括DEP、ASLR等。在编写漏洞利用代码的时候,需要特别注意目标进程是否开启了DEP(Linux下对应NX)、ASLR(Linux下对应PIE&#xf…

机器学习降维算法一:PCA(主成分分析算法)

引言: 机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。降维的本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达,目前最多使用向量表达形式。 y是数据点映射后的低维向…

VS 2005模板丢失找回的办法

安装其他插件的时候,常常模板丢失,比较郁闷,以前就用土办法,重装VS来解决这个问题,这次终于弄清楚怎么回事了,可以采取下面两个步骤解决1。复制ProjectTemplates和ItemTemplates,保证VS能找到相…

一个简单的pwn例子---read函数

内容&#xff1a; #include<stdio.h> void exploit() {system("/bin/sh"); } void func() {char str[0x20];read(0, str, 0x50); } int main() {func();return 0; }我们要做的是利用溢出执行exploit函数 分析&#xff1a; 先执行func函数&#xff0c;func函数…

万网与阿里巴巴业务关系图解

阿里巴巴在港上市公司今天发布公告称&#xff0c;计划分拆旗下中国万网赴美上市。那么万网与阿里巴巴其它业务是怎样个关系&#xff1f;且看我们分析。 随着传统企业大面积地转向互联网经营&#xff0c;用电子商务来服务客户&#xff0c;它们面临的第一个问题就是建站。针对这一…

cobalt strick 4.0 系列教程(4)---监听器和基础设施管理

0x01 概述 任何行动的第一步都是建立基础设施。就 Cobalt Strike 而言&#xff0c;基础设施由一个或多个团队服务器、重定向器以及指向你的团队服务器和重定向器的 DNS 记录组成。一旦团队服务器启动并运行&#xff0c;你将需要连接到它并将其配置为接收来自受害系统的连接。监…

【竞赛题解】Codeforces Round #710 (Div. 3)

B. Partial Replacement 题意&#xff1a;有字符串由.和*组成&#xff0c;可标记其中*&#xff0c;首尾的*必须被标记&#xff0c;使被标记的*之间距离不超过k&#xff0c;求最少的标记量 思路&#xff1a;首先从首尾出发确定首尾*的位置&#xff0c;再由首beg出发向后的k个元…

基于RBAC模型的通用企业权限管理系统

1. 为什么我们需要基于RBAC模型的通用企业权限管理系统 管理信息系统是一个复杂的人机交互系统&#xff0c;其中每个具体环节都可能受到安全威胁。构建强健的权限管理系统&#xff0c;保证管理信息系统的安全性是十分重要的。权限管理系统是管理信息系统中代码重用性最高的模块…

密码学加密算法分类_密码学中的国际数据加密算法(IDEA)

密码学加密算法分类Introduction 介绍 International Data Encryption Algorithm (IDEA) is a type of cryptography as a block cipher algorithm designed by "Xuejia Lai" and "James L.Massey" of ETH-Zrich and was first published in the 1991 yea…

如何定位溢出点位置

程序&#xff1a; #include <stdio.h> void exploit() {system("/bin/sh"); } void func() {char str[20];read(0,str,50);printf("the str is:%s\n",str); } int main() {func();return 0; }关掉保护机制&#xff1a; gcc -no-pie -fno-stack-pro…

【竞赛题解】2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)

B 找山坡 题意&#xff1a;在数组中找到两相等元素相距最大的距离且这两元素间的元素都不小于该两端值 思路&#xff1a;采用单调栈 例如&#xff1a;a[] { 2 3 5 4 6 3 }&#xff0c;栈内存储元素的坐标&#xff08;从1开始&#xff09;&#xff0c;便于计算距离 首先将a[…

操作系统中的处理机调度调度_操作系统中的流程分类和调度

操作系统中的处理机调度调度处理 (Process) In the operating system, there are numerous task and application program run simultaneously. A program is stored in the hard disk or any other form of secondary storage. When the program is executed it must be loade…

NX机制及绕过策略-ret2libc

程序&#xff1a; 1.c #include <stdio.h> void exploit() {system("/bin/sh"); } void func() {char str[0x20];read(0,str,0x50); } int main() {func();return 0; }0x01 NX介绍 溢出攻击的本质在于冯诺依曼计算机模型对数据和代码没有明确区分这一先天性缺…

【竞赛题解】第22次CCF计算机软件能力认证 B

今天&#xff08;准确说是昨天&#xff0c;一下子就过12点了&#xff09;下午刚参加了CSP认证考试&#xff0c;大概是考了220&#xff08;前两题AC&#xff0c;第三题太折磨了懒得看了&#xff0c;后面两题各混了10分&#xff09;&#xff0c;唯一有点参与感的就是B题了&#x…

gbd调试64位程序关键

程序&#xff1a; 4.c&#xff1a; #include<stdio.h> void exploit() {system("/bin/sh"); } void main() {char buf[20];gets(buf); }编译&#xff1a; gcc -no-pie -fno-stack-protector -m64 -o 4.exe 4.cNX保护&#xff0c;栈数据不可执行 使用命令&…

fcfs调度算法_FCFS:先来先服务调度算法

fcfs调度算法The FCFS, which stands for First Come First Serve Scheduling Algorithm, is a non-preemptive scheduling algorithm, which means that if a process once starts executing in the processor, then it cannot be preempted in between the processing. Thus,…

nhibernate学习之三级联(Ternary Associations)篇

1) 学习目标通过进一步学习Nhibernate基础知识&#xff0c;掌握用Nhiberate实现对级联的支持&#xff0c;通过一个简单的用户角色权限系统来体验nhibernate对级联的强大支持。2&#xff09;开发环境和必要准备 开发环境为:windows 2003,Visual studio .Net 2005,Sql server 200…