zoukankan      html  css  js  c++  java
  • iOS 混合变换旋转 CGAffineTransform 的使用

    在ios 中, Core Graphics 提供了一系列的函数可以在一个变换的基础上做深层次的变换,如果做一个既要缩放又要旋转的变换,以下的方法比较实用。

    1
    2
    3
    CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy)  --放大缩小
    CGAffineTransformRotate(CGAffineTransform t, CGFloat angle)  --旋转的角度
    CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty)  --偏移量:在原始的位置上偏移tx像素和ty像素

    具体使用如下:

    1. 创建一个CGAffineTransform 的对象

    2.设置要处理的过程

    3.对于需要处理的对象进行赋值

    代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //创建CGAffineTransform的对象
    CGAffineTransform transform = CGAffineTransformIdentity;
     //设置 处理对象缩小50%
     transform = CGAffineTransformScale(transform, 0.5, 0.5);
     //设置 处理对象旋转30度角
     transform = CGAffineTransformRotate(transform, M_PI / 180.0 * 30);
     //接着 偏移200像素
     transform = CGAffineTransformTranslate(transform, 200, 0);
     //对需要处理的对象赋值:affineTransform
     self.imageView.layer.affineTransform = transform;

     效果图如下:

    注意的地方:

    需要注意的地方:图片向右边发生了平移,但并没有指定距离那么远 (200像素),另外它还有点向下发生了平移。原因在于当你按顺序做了变换,上 一个变换的结果将会影响之后的变换,所以200像素的向右平移同样也被旋转了30 度,缩小了50%,所以它实际上是斜向移动了100像素。

    这意味着变换的顺序会影响最终的结果,也就是说旋转之后的平移和平移之后的旋
    转结果可能不同。
    
  • 相关阅读:
    【Java】 Spring 框架初步学习总结(一)简单实现 IoC 和 AOP
    【Java】MyBatis框架初步学习总结
    CPLEX在Linux上的安装与配置
    CPLEX在IDEA上的配置
    WINDOWS系统下用BAT脚本运行JAR包
    启发式算法:遗传算法 (Genetic algorithm)
    Java基础知识:集合框架
    Java基础知识:Collection接口
    打印n位数的最大值
    我喜欢的博客
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/13161436.html
Copyright © 2011-2022 走看看