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. Skype 使用小技巧

    原文发布在个人独立博客上,链接:http://maxpeng.vipcloud.me/2016/09/01/skype-tricks-tips/   Skype 作为一个即时聊天工具,相信大家都不陌生 ...

  2. (reverse)Palindromes hdu2163

    Palindromes 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2163 (此题是为了对于JAVA温故知新的) Problem Description ...

  3. logstash5.5 数据采入elasticsearch5.5(基于x-pack)

    logstash5.5 数据采入elasticsearch5.5(基于x-pack) 以采集redis日志信息为例 redis日志文件.MQ(redis).logstash主机:10.10.83.16 ...

  4. 搭建ftp

    相信很多人都知道ftp吧.打个比方.在你们公司或者学校里面有一个ftp地址,里面存放了你们所需要的一些常用的资源.这样的话你们就可以随时登录这个ftp来拉取你所需要的资源(在范围内),简单的来说,ft ...

  5. Hibernate SQL查询 addScalar()或addEntity()【转】

    本文完全引用自: http://www.cnblogs.com/chenyixue/p/5601285.html Hibernate除了支持HQL查询外,还支持原生SQL查询.          对原 ...

  6. 常用的Date对象和Math对象方法

    Date对象方法: 当前用户本地时间 let time = new Date(); 获取整数年 console.log(time.getFullYear()); 获取当前月(月份要加1) consol ...

  7. JavaScript常用函数总结

    1.test()方法 var str = "wzltestreg"; var reg = new RegExp("wzl", ""); al ...

  8. 用Quartz 2D画小黄人

    第一步: 先创建一个OneView类,并在storyboard里边拖拽一个UIview,将这个UIview的类改成OneView.如图所示: 第二步: 在新创建的Oneview里,补齐下列代码: // ...

  9. 2017-2018-2 165X 『Java程序设计』课程每周成绩公布

    2017-2018-2 165X 『Java程序设计』课程 每周成绩公布 本博客将跟随教学进度不定期更新,每次更新后将在课程群公布.如对成绩有疑问,请于公布成绩后的1天之内联系助教,进行审核确认. - ...

  10. Your Database is downloaded and backed up on....(腾讯云的mysql被攻击)

    今天发现自己的服务器被黑客攻击,自己的mysql服务器的库被删掉,并且新创了一个warning库,只有一个readme表.不知道原因,也许是自己再github上的项目暴漏了自己的密码,还要0.6比特币 ...