iOS - CALayer相关(CATransform3D)
一、图层的几何
图层的几何简单通俗,图层的所有几何属性(包括矩阵变换),都可以有隐式和显式动画。
图层几何的属性:
1.position是CGPoint值,她指定图层相对于她图层的位置,该值基于父图层的坐标系。
2.bounds是CGRect值,她指定图层的原点(bounds.size)和图层的原点(bounds.origin - 当重写图层的drawRect的时候,bounds.origin可以作为图形上下文的原点)。
3.frame是隐式的属性,她是position,bounds,anchorPoint和Transform属性的结合结果。
特别说明:设置新的frame将会改变图层的position和bounds属性,但是frame自身并没有
被保存!同时,bounds.origin不受干扰。
4.anchorPoint(锚点)是CGPoint值,她指定一个基于图层bounds的符合位置坐标系的位置。锚点指定了bounds相对于position的值,同时也可以作为transform的支点。锚点使用单元坐标系表示,(0,0)点接近图层的原点,(1,1)点是原点的对角点,改变图层的父图层的变化属性将会影响到锚点的方向,具体变化取决于父图层坐标系Y轴。
附加:
CALayer的重要属性:
@property CGPoint position;
@property CGPoint anchorPoint;
anchorPoint 中文字面意思是锚点,我理解为固定的layer的旋转点
1.anchorPoint 在Layer中初始化的是(0.5,0.5),这个坐标值是相对于Layer本身的bounds(CGRectmake(0,0,width,height))的比例值;
2.anchorPoint 的在Layer的左上角、右下角分别为(0,0),(1,1),这说明他遵守
了Frame和bounds也是左手坐标系;
3.anchorPoint 的所处的坐标系其实就是它的superLayer,这个跟UIView中的superView
于subView的概念一样,super是爷爷,sub是儿子,爷爷只有一个,但是儿子却有很多;
4.再来看看position的原始定义: The layer’s position in its superlayer’s coordinate space。
中文可以理解成为position是layer相对superLayer坐标空间的位置,很显然,这里的位置是根据anchorPoint来确定的。
公式可以理解:
首先要清楚,UIView的frame属性是由center和bounds属性计算得到的。
frame.origin.x = center.x - bounds.size.width/2.0;
frame.origin.y = center.y - bounds.size.height/2.0;
frame.size = bounds.size;
相对的,身为UIView下级结构的CALayer呢?
CALayer的position(相当于center),bounds,anchorPoint是什么关系呢?
虽然没有frame,但是CALayer的显示(虚拟frame)也是由这些组件算出来的
frame.origin.x = position.x - anchorPoint.x * bounds.size.width/2.0;
frame.origin.y = position.y - anchorPoint.y * bounds.size.height/2.0;
frame.size = bounds.size;
所以,当我们在上面修改anchorPoint的时候,实际上修改了显示的运算元素!这样当anchorPoint修改为(1.0,1.0)的时候,经过重新运算,CALayer向左上角移动了
相关博客:
http://www.cnblogs.com/benbenzhu/p/3615516.html?utm_source=tuicool
http://www.cnblogs.com/wendingding/p/3800736.html
http://blog.csdn.net/primer_programer/article/details/9904287
二、图层的几何变化
推荐看:http://www.cnblogs.com/liyufeng2013/p/3617083.html
图层一旦创建,你就可以通过矩阵变换来改变一个图层的几何形状。CATransform3D的数据结构定义一个同质的三维变化(4*4 CGFloat矩阵),用于旋转、缩放、歪斜和透视等。
你可以通过以下的任何一个方法改变CATransform3D的数据结构。
- 使用CATransform3D函数。
- 直接修改数据结构的成员,例如m34。
- 使用键-值编码改变键的路径。
CATransform3DIdentity是单位矩阵,并不作任何变化,把该矩阵应用在图层上面,会把图层几何数形修改为默认值。
1.使用CATransform3D函数
使用变化函数可以在动画里面操作矩阵。
表 1 CATransform3D 变换函数 :偏移、旋转和缩放
Function |
Use |
|
Returns a transform that translates by ‘(tx, ty, tz)’. t’ = [1 0 0 0; 0 1 0 0; 0 0 1 0; tx ty tz 1]. |
|
Translate ‘t’ by ‘(tx, ty, tz)’ and return the result: * t’ = translate(tx, ty, tz) * t. |
|
Returns a transform that scales by `(sx, sy, sz)’: * t’ = [sx 0 0 0; 0 sy 0 0; 0 0 sz 0; 0 0 0 1]. |
|
Scale ‘t’ by ‘(sx, sy, sz)’ and return the result: * t’ = scale(sx, sy, sz) * t. |
|
Returns a transform that rotates by ‘angle’ radians about the vector ‘(x, y, z)’. If the vector has length zero the identity transform is returned. |
|
Rotate ‘t’ by ‘angle’ radians about the vector ‘(x, y, z)’ and return the result. t’ = rotation(angle, x, y, z) * t. |
旋转的单位采用弧度(radians),而不是角度(degress)。以下两个函数,你可以在弧度和角度之间切换。
CGFloat DegreesToRadians(CGFloat degrees) {;}; CGFloat RadiansToDegrees(CGFloat radians) { / M_PI;};
CATransform3DInvert反转矩阵的转换函数。反转矩阵乘以逆矩阵的值,结果是原始值。
(还有,CGAffineTransform烧脑,以后再研究~~)
2.修改CATransform3D的数据结构
struct CATransform3D { CGFloat m11, m12, m13, m14; CGFloat m21, m22, m23, m24; CGFloat m31, m32, m33, m34; CGFloat m41, m42, m43, m44; }; typedef struct CATransform3D CATransform3D;
iOS - CALayer相关(CATransform3D)的更多相关文章
- iOS网络相关知识总结
iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Reque ...
- iOS网络相关零散知识总结
iOS网络相关零散知识总结 1. URL和HTTP知识 (1) URL的全称是Uniform Resource Locator(统一资源定位符). URL的基本格式 = 协议://主机地址/路径 ...
- iOS CALayer使用
CALayer使用 iOS的设备中,我们之所以能看到各种各样的控件.文字.图片,都是Core Animation框架的功劳.它通过图层的合成,最终显示在屏幕上.而今天这篇文章讲的就是Core Anim ...
- iOS CALayer应用详解
跟着大神一起进步,本篇博客原文地址:http://blog.csdn.net/hello_hwc?viewmode=contents 一 CALayer是什么? Layers是绘图和动画的基础, L ...
- iOS - 直播相关文章
直播相关文章 直播RTMP可用于测试的服务器地址 FFmpeg avdumpformat输出的tbn.tbc.tbr.PAR.DAR的含义 FFmpeg 3.0 计算视频时长 HLS Streamin ...
- IOS CALayer(二)
UIview内部有个默认的CALayer对象层,虽然我门不可以重新创建它,但是我门可以再其上面添加子层. 我们知道,UIView有 addSubview:方法,同样,CALayer也有addSubla ...
- IOS CALayer(一)
对于一个app的好坏,我们首要判断的便是app的界面,而界面的建立则是在图形的处理基础上的,说到图形处理又不得不提及Quartz2D,CALayer. 在iOS系统中,你能看得见摸得着的东西基本上都是 ...
- iPhone/iOS图片相关(读取、保存、绘制、其它相关)
http://blog.csdn.net/jerryvon/article/details/7526147 20:50:42 一.读取图片 1.从资源(resource)读取 UIImage* ima ...
- iOS CALayer动画中使用的3个tree
在网上经常看到关于layer的tree的描述,不太理解,今天找到了官方文档,原文在Core Animation Programming Guide 中. Layer Trees Reflect Dif ...
随机推荐
- Button、ImageButton及ImageView详解
Button.ImageButton及ImageView详解 在应用程序开发过程中,很多时候需要将View的background或者src属性设置为图片,即美观又支持点击等操作.常见的有Button. ...
- Windows Phone 8 下载文件进度
后台代码: public partial class MainPage : PhoneApplicationPage { private long siz; private long speed; p ...
- 【JavaScript】 JSON
1.json 一共就这么几种数据类型 ①,number 和JavaScript的number完全一样 ②,boolean 就是JavaScript的true和false ③,stri ...
- difference between append and appendTo
if you need append some string to element and need set some attribute on these string at the same ti ...
- android第三方框架 xlistview 的使用
如今上拉刷新,下拉加载更多已经是浩如烟海的app的标配了 最近正好有相关的需要就去学习了一下,还是那句老话凡事都靠自己来 搞实在不是一件好事,费时费力不说可能还是在做无用功,不过自己研究学习 还是很有 ...
- 十天冲刺---Day2
站立式会议 站立式会议内容总结: git上Issues新增内容: 燃尽图 照片
- HIbernate的增删改
数据库是oracle 以一对多为例:user50一的一方 order50是多的一方 首先是实体类: 这里的实体是双向关系,既通过user50可以找到order50,通过order50可以找到 ...
- 关于web前端的学习路线
第一阶段: HTML+CSS:HTML进阶.CSS进阶.div+css布局.HTML+css整站开发. JavaScript基础:Js基础教程.js内置对象常用方法.常见DOM树操作大全.ECMAsc ...
- poj1655 树的重心 树形dp
树的重心定义为:找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡. 处理处每个节点的孩子有几个,和树的大小就好了. #include< ...
- Self Host WebApi服务传输层SSL加密(服务器端+客户端调用)
接上篇<WebApi服务URI加密及验证的两种方式>,在实际开发中,仅对URI进行加密是不够的,在传输层采用SSL加密也是必须的. 如果服务寄宿于IIS,那对传输层加密非常简单仅需要配置一 ...