CGAffineTransform
//移动效果
CGAffineTransform CGAffineTransformMakeTranslation ( CGFloat tx, CGFloat ty );CGAffineTransform CGAffineTransformTranslate ( CGAffineTransform t, CGFloat tx, CGFloat ty );//旋转效果
CGAffineTransform CGAffineTransformMakeRotation ( CGFloat angle );CGAffineTransform CGAffineTransformRotate ( CGAffineTransform t, CGFloat angle );//缩放效果
CGAffineTransform CGAffineTransformMakeScale ( CGFloat sx, CGFloat sy );CGAffineTransform CGAffineTransformScale ( CGAffineTransform t, CGFloat sx, CGFloat sy );//反转效果
CGAffineTransform CGAffineTransformInvert ( CGAffineTransform t );//只对局部产生效果
CGRect CGRectApplyAffineTransform ( CGRect rect, CGAffineTransform t );//判断两个AffineTrans是否相等
bool CGAffineTransformEqualToTransform ( CGAffineTransform t1, CGAffineTransform t2 );//获得Affine Transform
CGAffineTransform CGContextGetUserSpaceToDeviceSpaceTransform ( CGContextRef c );//下面的函数只起到查看的效果,比如看一下这个用户空间的点,转换到设备空间去坐标是多少CGPoint CGContextConvertPointToDeviceSpace ( CGContextRef c, CGPoint point );CGPoint CGContextConvertPointToUserSpace ( CGContextRef c, CGPoint point );CGSize CGContextConvertSizeToDeviceSpace ( CGContextRef c, CGSize size );CGSize CGContextConvertSizeToUserSpace ( CGContextRef c, CGSize size );CGRect CGContextConvertRectToDeviceSpace ( CGContextRef c, CGRect rect );CGRect CGContextConvertRectToUserSpace ( CGContextRef c, CGRect rect );
了解动画需要先了解仿射变换,先在View中添加一个按钮和一个图片, 通过这演示常见的变换,直接上码:
#import "ViewController.h"#define M_PI 3.14159265358979323846264338327950288
#define M_PI_2 1.57079632679489661923132169163975144
#define M_PI_4 0.785398163397448309615660845819875721
@interface ViewController ()
{UIButton *btn;UIImageView *imgview;
}
@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];btn=[UIButton buttonWithType:UIButtonTypeSystem];btn.frame=CGRectMake(30, 30, 50, 50);btn.backgroundColor=[UIColor redColor];[btn setTitle:@"按钮" forState:UIControlStateNormal];[btn addTarget:self action:@selector(btnclick:) forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:btn];imgview=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"test.jpg"]];imgview.frame=CGRectMake(100, 100, 120, 120);[self.view addSubview:imgview];}
一.平移变换,当我实验平移时,将下面代码放在按钮点击方法中,第一个方法第一次点击有效,第二个是每次点击都会平移,第三个不会平移
//平移变换imgview.transform=CGAffineTransformMakeTranslation(10, 10); //每次移动参照点都是初始点imgview.transform=CGAffineTransformTranslate(imgview.transform, 20, 20);//平移参照第一个参数的点imgview.transform=CGAffineTransformIdentity;//初始点
二、旋转
//旋转imgview.transform=CGAffineTransformMakeRotation(M_PI/4);//旋转参照初始值 正数顺时针 负数逆时针imgview.transform=CGAffineTransformRotate(imgview.transform, -M_PI/4);//旋转参照第一个参数的值
三、缩放
// 缩放imgview.transform=CGAffineTransformScale(imgview.transform,0.8,0.8);//在第一个参数的基础上缩放 第二三参数1时为正常大小imgview.transform=CGAffineTransformMakeScale(0.5,0.5);//在原视图的基础上缩放
四、翻转
//翻转// CGAffineTransform DefaultAffineTransform =CGAffineTransformMake(1, 0, 0, 1, 0, 0);//默认// imgview.transform=CGAffineTransformInvert(imgview.transform); //调用此行代码并不会产生翻转效果,因为恒等矩阵*恒等矩阵还是恒等矩阵,这样就没有变化CGAffineTransform AffineTransform =CGAffineTransformMake(0, 1, 1, 1, 1, 0);imgview.transform=CGAffineTransformInvert(AffineTransform);
五、合并
//合并 将两个仿射合并成一个仿射效果
// CGAffineTransform AffineTransform1 =CGAffineTransformMakeScale(0.5,0.5);CGAffineTransform AffineTransform1=CGAffineTransformScale(imgview.transform,0.8,0.8);CGAffineTransform AffineTransform2 =CGAffineTransformMakeRotation(M_PI/4);CGAffineTransform AffineTransform3=CGAffineTransformConcat(AffineTransform1,AffineTransform2);CGAffineTransform AffineTransform4 =CGAffineTransformMake(0, 1, 1, 1, 1, 0);imgview.transform=CGAffineTransformConcat(AffineTransform3,AffineTransform4);
六、判断是否相同
CGAffineTransform DefaultAffineTransform =CGAffineTransformMake(1, 0, 0, 1, 0, 0);CGAffineTransform DefaultAffineTransform1 =CGAffineTransformMake(1, 0, 0, 1, 0, 0);
// CGAffineTransform AffineTransform1 =CGAffineTransformMakeScale(0.5,0.5);bool flag=CGAffineTransformEqualToTransform(DefaultAffineTransform, DefaultAffineTransform1);NSLog(@"%d",flag);
转载于:https://www.cnblogs.com/5ishare/p/4384177.html
CGAffineTransform相关推荐
- CGAffineTransform与CATransform3D
CGAffineTransform 1.CG的前缀告诉我们,CGAffineTransform类型属于Core Graphics框架,Core Graphics实际上是一个严格意义上的2D绘图API, ...
- CGAffineTransform的使用大概:
1. CoreGraphics框架中的CGAffineTransform类可用于设定UIView的transform属性,控制视图的缩放.旋转和平移操作: transform我们一般称为形变属性,其本 ...
- iOS压缩动画 CGAffineTransform
因为项目需求,需要如下这样一个简单的动画效果: ####单个控件 这个动画效果,如果对控件使用UIView的block动画,设置控件的Frame值,是可以实现的. 比如下面这个效果: 我们可以代码来简 ...
- iOS开发 CGAffineTransform 让图片旋转, 旋转后获得图片旋转的角度
1.让图片旋转 UIImageView *imageView = [[UIImageView alloc]init]; imageView.frame = CGRectMake(50, 50, 200 ...
- iOS方法类:CGAffineTransform
iOS方法类:CGAffineTransform的使用大概 CoreGraphics框架中的CGAffineTransform类可用于设定UIView的transform属性,控制视图的缩放.旋转和平 ...
- CGAffineTransform 放射变换
矩阵乘法 A B相乘要A的列数等于B的行数才有定义,结果是一个A行B列的矩阵C,C的每个元素值为A对应的行与B对应的列的元素乘积的和 具体看这里 原理 CGAffineTransform CGAffi ...
- CGAffineTransform 获取 旋转的弧度 和 角度 的方法
CGAffineTransform _trans = sticker.transform;CGFloat rotate = acosf(_trans.a);// 旋转180度后,需要处理弧度的变化if ...
- CGAffineTransform 视频旋转(转)
记录下视频旋转 // - (void)test:(NSURL *)url transformUrl:(NSURL *)exportUrl { [self rotateVideoAssetWithFil ...
- iOS CGAffineTransform你了解多少?
CGAffineTransform介绍 概述 CGAffineTransform是一个用于处理形变的类,其可以改变控件的平移.缩放.旋转等,其坐标系统采用的是二维坐标系,即向右为x轴正方向,向下为y轴 ...
最新文章
- ftp服务器搭建(离线安装vsftpd),配置
- U3D 场景切换时 脚本对象,GO对象,资源对象的问题
- three.js glb 多个_25万的预算,奔驰GLB、宝马X1、奥迪Q3该怎么选
- Java多线程与并发库高级应用 学习笔记 1-9课
- Codeforces 550D. Regular Bridge 构造
- 用java实现zip压缩
- 如何通过7个Logback调整立即改善Java日志记录
- mysql 重复了更新_MYSql id相同就更新
- 中文字体字号和磅数的转化
- 京瓷打印机1025默认管理员密码_京瓷2235默认登录密码_动漫台
- SQL用了两年多,分享2个最常用的小技巧
- python和c++哪个好-关于python和c语言学哪个好
- python实现按照给定范围随机生成小数,偶数,奇数,整数,正态分布,均匀分布数据以及图片
- Mendeley从已有文献找相关文献的方法
- java数字金额大写金额_Java实现 将数字金额转为大写中文金额
- python词性标注_Python NLTK学习5(词性标注)
- 马克思主义基本原理概述
- 论文阅读笔记《Regularizing Dialogue Generation by Imitating Implicit Scenarios》
- linux power manager模型
- java 批量执行 sql_JDBC批量执行SQL