CGAffineTransform此类是一个3*3矩阵的变换。

- (void)transformImageView

{

CGAffineTransform t = CGAffineTransformMakeScale(scale * previousScale,

scale * previousScale);

t = CGAffineTransformRotate(t, rotation + previousRotation);

self.imageView.transform = t;

}

1、首先创建了一个变换CGAffineTransform的一个对象 t ,这个变换是用来放缩的,里面的两个参数分别是对宽和高放大或缩小的倍数,这里是以相同比例放缩的。

2、第二行句是在放缩变化中再加入角度的变换。‘

3、最后把变换赋给图片视图的一个属性transform。

就这么简单就实现了图片的旋转和放缩。

CGAffineTransform类的方法

一、创建一个Transformations

1、CGAffineTransformMake  //直接创建变换

CGAffineTransform CGAffineTransformMake (

CGFloat a,

CGFloat b,

CGFloat c,

CGFloat d,

CGFloat tx,

CGFloat ty );

可以看到参数比较多,其实它就是对应矩阵的前两列。据我估计,

可能一般不会直接用这个做变换。

2、CGAffineTransformMakeScale (CGFloat sx, CGFloat sy);//创建一个给定比例放缩的变换

视图引用了这个变换,那么图片的宽度就会变为  width*sx  ,对应高度变为  hight * sy。

CGAffineTransformMakeScale(-1.0, 1.0);//水平翻转

CGAffineTransformMakeScale(1.0,-1.0);//垂直翻转

3、CGAffineTransform CGAffineTransformMakeRotation ( CGFloat angle); //创建一个旋转角度的变化

在这里可以看到参数并不是一个角度,但是它是把参数作为一个弧度,然后把弧度再转换为角度来处理,

其结果就可能是将一个图片视图旋转了多少度。

4、CGAffineTransformMakeTranslation  //创建一个平移的变化

CGAffineTransform CGAffineTransformMakeTranslation (CGFloat tx,CGFloat ty);

这个就比较好理解了,假设是一个视图,那么它的起始位置 x 会加上tx , y 会加上 ty

二、修改Transformations

1、CGAffineTransformTranslate //为一个变换再加上平移

CGAffineTransform CGAffineTransformTranslate (

CGAffineTransform t,

CGFloat tx,

CGFloat ty

);

简单来说就是在变化 t 上在加上平移

2、CGAffineTransformScale  //为一个Transformation再加上缩放

CGAffineTransform CGAffineTransformScale (

CGAffineTransform t,

CGFloat sx,

CGFloat sy);

3、CGAffineTransformRotate  //为一个Transformation再加上旋转

CGAffineTransform CGAffineTransformRotate (

CGAffineTransform t,

CGFloat angle

);

4、CGAffineTransformInvert    //返回Transformation的反向

CGAffineTransform CGAffineTransformInvert (CGAffineTransform t);

5、CGAffineTransformConcat  //合并两个Transformation

CGAffineTransform CGAffineTransformConcat (CGAffineTransform t1, CGAffineTransform t2);

返回一个由 t1 和  t2  合并而成的Transformation

三、运用Transformations

1、CGPointApplyAffineTransform  //把变化应用到一个点上

CGPoint CGPointApplyAffineTransform (

CGPoint point,

CGAffineTransform t );

这个方法的返回值还是一个CGPoint,在我看来由于是一个点,

这个方法最终也只会影响这个点所在的位置。

2、CGSizeApplyAffineTransform  //运用到一个区域中

CGSize CGSizeApplyAffineTransform (

CGSize size,

CGAffineTransform t);

只会改变区域的大小

3、CGRectApplyAffineTransform  //运用到一个带原点的区间

CGRect CGRectApplyAffineTransform (

CGRect rect,

CGAffineTransform t);

这个我亲自试验过,三个属性 放缩、旋转和平移都有的一个Transformation ,

但处理之后只会改变这个区域原点的位置,和宽、高的大小,并不会旋转

四、检测一个Transformation

1、CGAffineTransformIsIdentity //检测一个Transformation是不是恒等变换,也就是说不变

bool CGAffineTransformIsIdentity ( CGAffineTransform t);//其结果返回一个BOOL值

2、CGAffineTransformEqualToTransform  //检测两个Transformation是否相等。

bool CGAffineTransformEqualToTransform (

CGAffineTransform t1,

CGAffineTransform t2);

CGAffineTransform 缩放 / 旋转 / 平移的更多相关文章

  1. WPF/Silverlight中图形的平移,缩放,旋转,倾斜变换演示

    原文:WPF/Silverlight中图形的平移,缩放,旋转,倾斜变换演示 为方便描述, 这里仅以正方形来做演示, 其他图形从略. 运行时效果图:XAML代码:// Transform.XAML< ...

  2. 使用C++实现图形的旋转、缩放、平移

    编译环境:VS2017 编译框架:MFC 实验内容:显示一个三角形,并将其绕中心进行旋转.缩放以及平移等操作 实验步骤: 1.打开VS2017,并创建MFC项目,具体方法参见:http://www.c ...

  3. 初学Direct X(7) ——位图的旋转,缩放以及平移

    初学Direct X(7) --位图的旋转,缩放以及平移 本文旨在实现通过D3DXMatrixTransformation2D函数实现位图的旋转,缩放以及平移操作,但是具体的原理部分会在后面进一步的探 ...

  4. Three.js三维模型几何体旋转、缩放和平移

    创建场景中的三维模型往往需要设置显示大小.位置.角度,three.js提供了一系列网格模型对象的几何变换方法,从WebGL的角度看,旋转.缩放.平移对应的都是模型变换矩阵,关于矩阵变换内容可以观看本人 ...

  5. ARFoundation - 实现物体旋转, 平移,缩放

    ARFoundation - 实现物体旋转, 平移,缩放 本文目的是为了确定在移动端怎样通过单指滑动实现物体的旋转,双指实现平移和缩放. 前提知识: ARFoundation - touch poin ...

  6. 利用canvas制作图片(可缩放和平移)+相框+文字

    前言: 公司一个售前问我能不能用H5做一个手机拍照,给相片添加相框和添加文字上传到服务器的功能,我当时一琢磨觉得可行,就利用空余时间做了一个demo,去掉了拍照和上传,如果以后有机会,会给补上,当然对 ...

  7. iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)

    iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)       1.UIGestureRecognizer介绍 手势识别在iOS上非常重要,手势操作移动设备的重要特征,极大的增加 ...

  8. WPF动态加载3D 放大-旋转-平移

    原文:WPF动态加载3D 放大-旋转-平移 WavefrontObjLoader.cs 第二步:ModelVisual3DWithName.cs public class ModelVisual3DW ...

  9. ios iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)

    iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势) 转自容芳志大神的博客:http://www.cnblogs.com/stoic/archive/2013/02/27/2940 ...

随机推荐

  1. 外显子分析报错解决方案bin field of BAM record does not equal value computed based on alignment start and end, and length of sequence to which read is aligned

    以下链接给出了解决方案:https://gatkforums.broadinstitute.org/gatk/discussion/4290/sam-bin-field-error-for-the-g ...

  2. LVM基本概念及工作原理

    LVM基本概念及工作原理 背景知识: 一直困惑于LVM,特地找资料查了查,终于对LVM的概念和工作原理有了深入的理解.接下来记录下.新的技术出来必定是为了改变现有的不足,所以LVM的出现是由于对现有磁 ...

  3. Python基础【day03】:入门知识拾遗(八)

    本节内容 1.作用域 2.三元运算 3.进制 一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. 1 2 3 if 1==1:     name = 'wupeiq ...

  4. centos6.5环境下安装zk

    第一步:先下载安装包,解压. 第二步:进去根目录,创建data文件夹  mkdir  data 第三步:进去conf文件夹,修改  zoo_sample.cfg    的名字   mv zoo_sam ...

  5. springboot+rabbitmq整合示例程

    关于什么是rabbitmq,请看另一篇文: http://www.cnblogs.com/boshen-hzb/p/6840064.html 一.新建maven工程:springboot-rabbit ...

  6. aop(Aspect Oriented Programming)面向切面编程

    AOP,一个oop的后传,面向切面,一个基于代理模式的机制. 举例子把:说原理很难理解, 吃饭:谁都得吃饭,一个老师类,有吃饭的方法.一个学生类,也得有吃饭的方法.是不是都得实现这个方法?构建一个pe ...

  7. javascript 回到顶部

    <script type="text/javascript"> window.onload = function(){ var timer = null; //用于判断 ...

  8. Linux 查看文件编码

    查看某个文件的编码格式:使用 vi 编辑器 打开文件: 按 Esc 输入 ” : set fileencoding “ 就会显示出来 文件的编码格式 : set fileencoding

  9. Linux - 日志处理一

    Linux 日志处理 history # 历时命令默认1000条 HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S " # 让history命令显示具体时间 hi ...

  10. POJ1258 Agri-Net【最小生成树】

    题意: 有n个农场,已知这n个农场都互相相通,有一定的距离,现在每个农场需要装光纤,问怎么安装光纤能将所有农场都连通起来,并且要使光纤距离最小,输出安装光纤的总距离. 思路: 又是一个最小生成树,因为 ...