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,欢迎小伙伴(妹子更好)一起交流,谈谈人生理想。作为经常从网上索取免费资料的一员,要有回报回报的思想,也让更多的人少走弯路.