二维空间上的变换
UIViwe可以通过属性transform
进行变换,但它实际上只是封装了内部图层的变换。图层与之对应的属性是affineTransform
。它们的类型都是CGAffineTransform
。设置这个属性,可以进行二维空间上的旋转、缩放和平移。
可以快速生成CGAffineTransform
类型的函数:
CGAffineTransformMakeTranslation(CGFloat angle)
CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
-
CGAffineTransformMakeRotation(CGFloat angle)
它们分别可以进行平移、缩放和旋转的操作。效果如下:
还可以利用下面的方法混合不同的变化(CGAffineTransformIdentity
为单位矩阵):
CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty)
CGAffineTransformRotate(CGAffineTransform t, CGFloat angle)
CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy)
CGAffineTransformConcat(CGAffineTransform t1, CGAffineTransform t2)
需要注意的是,混合不同的变化时,后面的变化会收到前面变化的影响。例如
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformRotate(transform, 1.0/3*3.14);
transform = CGAffineTransformTranslate(transform, 200, 0);
view.transform = transform;
效果为
(图四)先旋转后平移CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformTranslate(transform, 200, 0);
transform = CGAffineTransformRotate(transform, 1.0/3*3.14);
view.transform = transform;
效果为
(图五)先平移后旋转水平方向的位移受到了旋转变换的影响。最终,水平方向的位移为(cos 1.0/3*3.14)*200,垂直方向的位移为(sin 1.0/3*3.14)*200
三维空间上的变换
通过设置CALayer
的transform
属性,可以实现三维空间上的变换。transform
为CATransform3D
类型。可以通过如下几个函数快速生成:
CATransform3DMakeRotation(CGFloat angle, CGFloat x, CGFloat y, CGFloat z)
CATransform3DMakeScale(CGFloat sx, CGFloat sy, CGFloat sz)
CATransform3DMakeTranslation(Gloat tx, CGFloat ty, CGFloat tz)
网友评论