放射变换:
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这一个属性来设置是否要绘制背面。
网友评论