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
<br>#define M_PI_2      1.57079632679489661923132169163975144
<br>#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);


相关文章
|
安全 关系型数据库 MySQL
内网穿透---公司内部搭建企业论坛,并实现在外也可以访问
只需要三个软件配合,就能在很短时间内建立起像样的企业论坛。论坛主体可以使用开源的Discuz网页论坛,使用PHPStudy构建网页运行必须的环境,再使用cpolar穿透内网,让不同分部或分公司的员工都能访问到该论坛。
内网穿透---公司内部搭建企业论坛,并实现在外也可以访问
|
传感器 机器学习/深度学习 Web App开发
AI之Robot:机器人Robot的简介、发展历史、案例应用之详细攻略
AI之Robot:机器人Robot的简介、发展历史、案例应用之详细攻略
|
9天前
|
机器学习/深度学习 算法 数据挖掘
量子计算:揭示气候预测的未来
量子计算:揭示气候预测的未来
49 20
|
14天前
|
人工智能 边缘计算 运维
容器化浪潮下的AI赋能:智能化运维与创新应用
近年来,容器技术以其轻量、高效、可移植的特性成为云原生时代的基石,推动应用开发和部署方式革新。随着容器化应用规模扩大,传统运维手段逐渐力不从心。AI技术的引入为容器化生态带来新活力,实现智能监控、自动化故障诊断与修复及智能资源调度,提升运维效率和可靠性。同时,AI驱动容器化创新应用,如模型训练、边缘计算和Serverless AI服务,带来更多可能性。未来,AI与容器技术的融合将更加紧密,推动更智能、高效的运维平台和丰富的创新应用场景,助力数字化转型。
|
2月前
|
人工智能 弹性计算 运维
操作系统控制台,让运维更简单!
操作系统控制台初体验,运维智能666!
174 37
操作系统控制台,让运维更简单!
|
2月前
|
人工智能 监控 测试技术
阿里云磐久服务器稳定性实践之路
阿里云服务器质量智能管理体系聚焦自研服务器硬件层面的极致优化,应对高并发交付、短稳定性周期、早问题发现和快修复四大挑战。通过“三个重构”(质量标准、开发流程、交付模式)、“六个归一”(架构、硬件、软件、测试、部件、制造)策略,实现芯片、整机和云同步发布,确保快速稳定上量。此外,全场景测试体系与智能预警、分析、修复系统协同工作,保障服务器在萌芽阶段发现问题并及时解决,提升整体质量水平。未来,阿里云将继续深化大数据驱动的质量管理,推动服务器行业硬件质量的持续进步。
|
3月前
|
供应链 监控 数据可视化
如何通过库存看板优化企业的库存管理流程,提升供应链反应速度?
库存管理是现代企业管理的重要环节,尤其在制造业、零售业及电商领域。本文详细探讨了如何通过库存看板优化管理流程,从基本概念、工作原理、实际应用到实施步骤,帮助企业提升库存管理的效率与精度。库存看板通过实时监控、拉动系统和数据驱动决策,减少库存积压和缺货,提高库存周转率,支持企业实现精益管理。
如何通过库存看板优化企业的库存管理流程,提升供应链反应速度?
|
数据可视化
漏刻有时数据可视化Echarts组件开发(19):树图tree构建环绕圆的解决方案
漏刻有时数据可视化Echarts组件开发(19):树图tree构建环绕圆的解决方案
173 1
漏刻有时数据可视化Echarts组件开发(19):树图tree构建环绕圆的解决方案
|
机器学习/深度学习 PyTorch API
Torch
Torch是一个用于构建深度学习模型的开源机器学习库,它基于Lua编程语言。然而,由于PyTorch的出现,现在通常所说的&quot;torch&quot;指的是PyTorch。PyTorch是一个基于Torch的Python库,它提供了一个灵活而高效的深度学习框架。
345 1
|
JavaScript
js判断开始时间与结束时间不大于24小时的解决方案
js判断开始时间与结束时间不大于24小时的解决方案
426 0