1.Transform
iOS中通过修改view
视图对象的transform
属性就能完成对view
的位移,缩放,旋转这样的2D变化
transform
属性的类型CGAffineTransform
(放射变换)是一种结构体类型
包含了6个可变的值和3个定值,组成了3*3的矩阵
a,b,0 c,d,0 tx,ty,1
修改了6个值中的某几个,就可以实现变形,实际中不会手动修改6个值,可以借助系统提供的API实现数值的改变
rotation
:旋转
scale
:缩放
translation
:位移
使用带Make的函数运算时都是基于没有变形前的那个状态
CGAffineTransformMakeRotation()
CGaffineTransformMakeScale()
CGAffineTransformMakeTranslation()
下面的函数是在每次变化的Transform属性基础之上继续改变
CGAffineTransformRotation()
CGAffineTranformScale()
CGAffineTransformTranslation()
CGAffineTransformInvert()
CGAffineTransformInvert()
得到相反的效果
CGAffineTransformIdentity
常量CGAffineTransformIdentity
记录矩阵没有变化的最初6个值, 如果将此常量赋值给tansform
属性的话,那么视图发生过的所有变形效果都会消失,回到最初状态
如: _views.transform = CGAffineTransformIdentity;
例
self.views.transform = CGAffineTransformRotate(self.views.transform, M_PI_4);
self.views.transform = CGAffineTransformScale(self.views.transform, 1.1, 1.1);
self.views.transform = CGAffineTransformTranslate(self.views.transform, 2, 3);
需要注意的是Rotate旋转后视图坐标系也会跟着旋转的
transform.gif2.Transform3D
在iOS中还可以通过对视图对象view
的图层属性layer
的transform
属性做修改来完成一些3D效果
layer
的transform
属性的类型CATransform3D
的结构体类型:
struct CATransform3D { CGFloat m11(x缩放), m12(y切变), m13(旋转), m14(); CGFloat m21(x切变), m22(y缩放), m23(), m24(); CGFloat m31(旋转), m32(), m33(), m34(透视效果,要操作的这个对象要有旋转的角度,否则没有效果。正直/负值都有意义); CGFloat m41(x平移), m42(y平移), m43(z平移), m44(); };
3D矩阵详解
在每次变化的Transform属性基础之上继续变换
CATransform3DRotate(CATransform3D t, CGFloat angle, CGFloat x, CGFloat y, CGFloat z)
CATransform3DScale(CATransform3D t, CGFloat sx, CGFloat sy, CGFloat sz)
CATransform3DTranslate(CATransform3D t, CGFloat tx, CGFloat ty, CGFloat tz)
带Make 根据初始值转换
CATransform3DMakeRotation(CGFloat angle, CGFloat x, CGFloat y, CGFloat z)
CATransform3DMakeScale(CGFloat sx, CGFloat sy, CGFloat sz)
CATransform3DMakeTranslation(CGFloat tx, CGFloat ty, CGFloat tz)
transform3D.gif
网友评论