美文网首页
Core Animation:变换

Core Animation:变换

作者: 黄龙辉 | 来源:发表于2016-02-22 16:09 被阅读41次

    二维空间上的变换

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

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

    • CGAffineTransformMakeTranslation(CGFloat angle)
    • CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
    • CGAffineTransformMakeRotation(CGFloat angle)
      它们分别可以进行平移、缩放和旋转的操作。效果如下:
    (图一)CGAffineTransformMakeScale(70, 70) (图二)CGAffineTransformMakeScale(0.5, 0.5) (图三)CGAffineTransformMakeRotation(3.14)

    还可以利用下面的方法混合不同的变化(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

    三维空间上的变换

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

    • CATransform3DMakeRotation(CGFloat angle, CGFloat x, CGFloat y, CGFloat z)
    • CATransform3DMakeScale(CGFloat sx, CGFloat sy, CGFloat sz)
    • CATransform3DMakeTranslation(Gloat tx, CGFloat ty, CGFloat tz)

    相关文章

      网友评论

          本文标题:Core Animation:变换

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