Core Animation:变换

2016-02-22  本文已影响41人  黄龙辉

二维空间上的变换

UIViwe可以通过属性transform进行变换,但它实际上只是封装了内部图层的变换。图层与之对应的属性是affineTransform。它们的类型都是CGAffineTransform。设置这个属性,可以进行二维空间上的旋转、缩放和平移。

可以快速生成CGAffineTransform类型的函数:

(图一)CGAffineTransformMakeScale(70, 70) (图二)CGAffineTransformMakeScale(0.5, 0.5) (图三)CGAffineTransformMakeRotation(3.14)

还可以利用下面的方法混合不同的变化(CGAffineTransformIdentity为单位矩阵):

需要注意的是,混合不同的变化时,后面的变化会收到前面变化的影响。例如

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

三维空间上的变换

通过设置CALayertransform属性,可以实现三维空间上的变换。transformCATransform3D类型。可以通过如下几个函数快速生成:

上一篇 下一篇

猜你喜欢

热点阅读