美文网首页
CALayer变换

CALayer变换

作者: Rokkia | 来源:发表于2016-06-20 17:17 被阅读45次

放射变换:

CGAffineTransform中的“仿射”的意思是无论变换矩阵用什么值,图层中平行的两条线在变换之后任然保持平行

CGAffineTransform就是将图层中的每一个点经过一次矩阵计算,然后算出一系列新的点,然后在将图层从新布局

几个计较有用的函数

CGAffineTransformMakeRotation(CGFloat angle)

CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)

CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty)

CGAffineTransformRotation(CGFloat angle)

CGAffineTransformScale(CGFloat sx, CGFloat sy)

CGAffineTransformTranslation(CGFloat tx, CGFloat ty)

两组函数基本一样区别在与一个有make一个没有make,用的时候你会发现两组函数,make要少一个参数,因为make默认每次都是从图层的最初的状态开始的,也就是默认第一个参数是CGAffineTransformIdentity,于是效果就是你执行多种变换的时候都只有最后一个的效果

layer用affineTransform属性设置CGAffineTransform

3D变换:

layer用transform于sublayerTransform来设置CATransform3D

UIView可以通过设置transform属性做变换,但实际上它只是封装了内部图层的变换。

CALayer同样也有一个transform属性,但它的类型是CATransform3D,而不是CGAffineTransform,CALayer用的是affineTransform。

CATransform3D和Core Graphics的函数类似,但是3D的平移和旋转多处了一个z参数,并且旋转函数除了angle之外多出了x,y,z三个参数,分别决定了每个坐标轴方向上的旋转。

CATransform3DMakeRotation(CGFloat angle, CGFloat x, CGFloat y, CGFloat z)

CATransform3DMakeScale(CGFloat sx, CGFloat sy, CGFloat sz)

CATransform3DMakeTranslation(Gloat tx, CGFloat ty, CGFloat tz)

尴尬,第一次敲,敲了半天的CGAffi...  结果发现不对   还郁闷半天  后来才发现是  CATrans... 

灭点:

当在透视角度绘图的时候,远离相机视角的物体将会变小变远,当远离到一个极限距离,它们可能就缩成了一个点,于是所有的物体最后都汇聚消失在同一个点。

Core Animation定义了这个点位于变换图层的anchorPoint,也就是锚点,可以自行改变用来控制动画。

sublayerTransform 它也是CATransform3D类型,但和对一个图层的变换不同,它影响到所有的子图层。当你想让你的一个图层下的所有图层都使用m34的时候,你就可以使用这个方法,让他们都使用同一个灭点。

CATransform3D someCATransform3D = CATransform3DIdentity;

CATransform3DIdentity.m34 = 1 / 500.0; //不要只写500  否则你什么效果都没有

view.layer.sublayerTransform = someCATransform3D; 

背面:

反面显示的是正面的一个镜像图片,根据我们的需要,我们一通过doubleSided这一个属性来设置是否要绘制背面。

相关文章

网友评论

      本文标题:CALayer变换

      本文链接:https://www.haomeiwen.com/subject/gbvwdttx.html