iOS 混合变换旋转 CGAffineTransform 的使用

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

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.对于需要处理的对象进行赋值

代码如下:

   //创建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像素。

这意味着变换的顺序会影响最终的结果,也就是说旋转之后的平移和平移之后的旋
转结果可能不同。
时间: 2024-10-22 03:29:04

iOS 混合变换旋转 CGAffineTransform 的使用的相关文章

iOS 混合变换旋转 CGAffineTransform

在ios 中, Core Graphics 提供了一系列的函数可以在一个变换的基础上做深层次的变换,如果做一个既要缩放又要旋转的变换,以下的方法比较实用. CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy) --放大缩小 CGAffineTransformRotate(CGAffineTransform t, CGFloat angle) --旋转的角度 CGAffineTransformTranslate(CG

iOS缩放、旋转UIButton

在练习缩放旋转UIButton控件时,出现点击控件x,y同时增加或者减一定像素,经过查找是xcode5开启了Auto Layout. 放大缩小的代码 - (IBAction)btnScale:(UIButton *)sender { //动画开始,设置执行时间 [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:1]; int tag = [sender tag]; float scale = tag ==

iOS方法类:CGAffineTransform的使用大概

CoreGraphics框架中的CGAffineTransform类可用于设定UIView的transform属性,控制视图的缩放.旋转和平移操作: 另称放射变换矩阵,可参照线性代数的矩阵实现方式0.0 这里附上的CGAffineTransform官方文档: https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGAffineTransform/index.html 总得来说,这个类中包含

iOS方法类:CGAffineTransform

iOS方法类:CGAffineTransform的使用大概 CoreGraphics框架中的CGAffineTransform类可用于设定UIView的transform属性,控制视图的缩放.旋转和平移操作: 另称放射变换矩阵,可参照线性代数的矩阵实现方式0.0 这里附上的CGAffineTransform官方文档: https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGAffineTr

IOS UIDevice & IOS检测屏幕旋转实例

一 UIDevice 简介 UIDevice类提供了一个单例实例代表当前的设备.从这个实例中可以获得的信息设备,比如操作系统名称.电池电量值(batteryLevel).电池状态(batteryState).设备的类型(model,比如iPod.iPhone等).设备的系统(systemVersion) 二 获取 UIDevice 实例 通过[UIDevice currentDevice]可以获取这个单粒对象 UIDevice *device = [UIDevice currentDevice]

iOS手动控制界面旋转

条条大道通罗马,解决同一个问题的手段也是多种多样的.对于<iOS 6及以上控制个别视图旋转案例>中提到的案例,我们是利用系统自带的旋转机制来解决问题的.同样地,我们也可以自己coding解决问题,且最终效果同系统的旋转动画效果是一模一样的.废话不多说,下面来大概讲解一下. 手动控制界面旋转的核心思路就是利用UIView的transform属性,旋转App的根视图.何为根视图?如果你的App的window.rootViewController是UINavigationController,那么根

iOS实现屏幕旋转

iOS实现屏幕旋转有两种方式 1. 应用本身支持 2. 手动旋转UIView (这种方式我没找到旋转 系统控件的方法 如:键盘.导航.UIAlertView) 如果你只是要把竖屏的播放器,做成支持横屏的,没有其他界面操作, 就可以考虑用第二种方式去做,比较简单 ,不过要注意计算view Frame 这两种方式看你具体的使用场景了,具体场景选择合适的方式. 公司项目中有几个界面要支持横竖屏,(直播录制界面.直播观看界面.视频回看界面). 刚开始我想着用第二种方式去解决,但是我们视频录制.观看界面有

触摸手势以及图形变换(UIGestureRecognizer, CGAffineTransform)

概要 本章主要学习了IOS开发中的触摸手势以及图形变换的知识,其中手势包括单击.双击.长按.拖动.滑动.缩放.旋转,图形变化主要使用放射矩阵的平移.缩放和旋转. 使用手势时应该注意手势是指定到特定的视图(UIView)上的,因此一个手势只能对应一个视图(手势里面的view属性可获取其所所对应的视图),而一个View可以添加多个手势.同时,因为有的手势之间有冲突的,比如单击和双击,滑动和拖动.针对这种情形需要使用手势的依赖性特性做出区分,改特性要求特定手势失败后才触发该手势. 仿射矩阵变化应该注意

iOS拍照图片旋转的问题

很久之前,遇到了这种情况,iOS某端拍照上传到服务器,其他iOS端从服务器下载该照片展示,发现图片逆时针旋转了90度.当时百度了一下,找到一段代码修正image方向,问题解决了,但没有深入理解底层原理.最近又遇到这个问题,还是同样的解决方案.但是codereview的时候同事问为什么这么写,就深入研究了一下. 首先我们要知道image的imageOrientation属性.它是记录拍照时手机方向的,iOS默认横屏Home键在右侧为标准拍照姿势,imageOrientation为UIImageOr