zl程序教程

您现在的位置是:首页 >  其它

当前栏目

CGAffineTransform

2023-09-14 08:57:59 时间

//移动效果

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;

@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);



iOS中webView加载URL需要处理特殊字符 之前在项目中遇到webView加载URL时,因为URL中有特殊字符,导致页面无法加载,而且在- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType代理方法中获取的request.URL是Null。一般来说我们调用webVIew的时候,只要给webVIew传一个url,在网页里面就可以显示网页信息。但是当我们传的url比较麻烦或者带文字符,带参数的时候我们需要对特殊字符
如何解决Swift混编的module编译错误 前言很多iOS工程都是基于Object-C开发,再逐步向Swift演进,演进过程中不可避免要进行Swift混编。Swift模块需要支持LLVM Module规范,混编工程会遇到各种Module编译错误。这对于不熟悉的同学来说简直是灾难,严重影响开发效率。本文会介绍常见的Module编译错误,希望对大家有所帮助。常见错误1:Could not build module xxx当一个OC模块引用了Sw
一文快速搞懂系列__一文快速搞懂SuperSet[实战案例] 大家好,我是**ChinaManor**,直译过来就是中国码农的意思,俺希望自己能成为国家复兴道路的铺路人,大数据领域的耕耘者,平凡但不甘于平庸的人。
带你读《LLVM编译器实战教程》之二:外部项目 本书的前半部分将向您介绍怎么样去配置、构建、和安装LLVM的不同软件库、工具和外部项目。接下来,本书的后半部分将向您介绍LLVM的各种设计细节,并逐步地讲解LLVM的各个编译步骤:前段、中间表示(IR)、后端、即时编译(JIT)引擎、跨平台编译和插件接口。本书包含有大量翔实的示例和代码片段,以帮助读者平稳顺利的掌握LLVM的编译器开发环境。
揭秘!如何用Flutter设计一个100%准确的埋点框架? 用户行为埋点是用来记录用户在操作时的一系列行为,也是业务做判断的核心数据依据,如果缺失或者不准确将会给业务带来不可恢复的损失。
社会主义 从.Net到iOS,在撸的道路上越走越远,工作之余经营着博客园http://www.cnblogs.com/5ishare,欢迎小伙伴(妹子更好)一起交流,谈谈人生理想。作为经常从网上索取免费资料的一员,要有回报回报的思想,也让更多的人少走弯路.