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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406108.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大城市求职生活建议

这算是被网友提示的一个很新颖的话题。我以前也一直没有思考过,嗯,想想觉得很有讨论的必要,所以写点自己的看法。 还是那句话,一家之言,欢迎拍砖哈。 话题的大意是这样的,一个网友,在开封上大学…

java item方法_Java常用方法

第一章 字符串1 、 获取字符串的长度: length()2 、 判断字符串的前缀或后缀与已知字符串是否相同前缀 startsWith(String s) 、后缀 endsWith(String s)3 、 比较两个字符串: equals(String s)4 、 把字符串转化为相应的数值int 型 Integer.parseInt( 字…

深入react技术栈(4):React数据流

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注前端小歌谣 state props 子组件props 组件props function prop 与父组件通信 propTypes 文章参考深入react学习技术栈

QNetworkRequest 请求类

QNetworkRequest Class Header: #include <QNetworkRequest>qmake: QT networkSince: Qt 4.4这个QNetworkRequest类保存了一个将被QNetworkAccessManager发送的请求.QNetworkRequest是Network Access API的一部分,是在网络上保存着发送一个请求的必要信息.它…

Oracle 索引的维护

一&#xff0e;查看系统表中的用户索引在Oracle中&#xff0c;SYSTEM表是安装数据库时自动建立的&#xff0c;它包含数据库的全部数据字典&#xff0c;存储过程、包、函数和触发器的定义以及系统回滚段。一般来说&#xff0c;应该尽量避免在SYSTEM表中存储非SYSTEM用户的对象。…

vue中this.$nextTick()的用法

vue中this.$nextTick()的用法

学会用taro封装一个组件

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注前端小歌谣学习前端知识 前言 大家好 我是歌谣 今天要说得是用taro封装一个组件 核心是学会弹性布局 直接上代码 组件部分 子组件 import Taro, { Component } from "tarojs/taro"; import { Text, View, Image…

Linux C获取文件属性

From: http://www.tianya360.com/html/xitonganzhuang/caozuoxitong/2010/0524/924.html Linux下如何在C下面判断一个文件是不是连接&#xff1f;判断上面生成的软连接文件link,执行后&#xff0c;程序却说是目录&#xff0c;不知道是为什么&#xff1f;源代码如下&#xff1a;…

java druid sqlite_springboot整合druid抛出dbType not support : sqlite异常

最近在搞springboot&#xff0c;将springboot和mybaits整合后没一点毛病&#xff0c;但想自己弄个sql监控&#xff0c;就准备使用阿里的druid来做连接池&#xff0c;毕竟是国产又是大厂出品&#xff0c;号称最牛X的连接池。整合过程就不说了&#xff0c;百度上大把的&#xff0…

Aspose转PDF时乱码问题的解决

主要原因是服务器上一般安装的字体都是有限的&#xff0c;而我们日常生活工作中总是喜欢用一些比较特别的字体&#xff0c;比如宋体GB2312&#xff0c;这时候如果用Aspose转PDF就会出现乱码&#xff0c;解决方法也比较简单&#xff0c;把本地的特殊字体拷贝到服务器的c:\window…

软件设计的火花——Brooks新作及《人月神话》三十五周年讨论会纪要

应UMLChina之邀&#xff0c;本人于6月20日参加了“Brooks新作及《人月神话》三十五周年讨论会”&#xff0c;会上由Brooks的《The Design of Design》4位中文版译者介绍了此书并谈了他们对此书的体会&#xff0c;讲演者与参会者进行了互动。无论是Brooks&#xff0c;还是4位译者…

深入react技术栈(6):React和DOM

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注前端小歌谣 React DoM findDoMNode render React得不稳定方法 Refs React之外得DoM操作 文章参考深入React技术栈

LD_LIBRARY_PATH should not contain the current directory

执行一次export LD_LIBRARY_PATHa directory转载于:https://www.cnblogs.com/tina-ma/p/4390500.html

java setdaemon_Java ThreadGroup setDaemon()方法

Java ThreadGroup setDaemon()方法java.lang.ThreadGroup.setDaemon() 方法改变该线程组的守护进程的状态。当其最后一个线程被停止或它的最后一个线程组被销毁守护线程组会自动销毁。1 语法public final void setDaemon(boolean daemon)2 参数daemon &#xff1a; 如果为true&…

Firefox无法启动,提示Profile is yet in use by another Firefox

From: http://hi.baidu.com/nxhujiee/blog/item/e997ba356c837896a71e1224.html 由于突然断电导致电脑非正常关机&#xff0c;重启之后发现Firefox无法启动&#xff0c;提示Profile is yet in use by another Firefox 经过在网上搜索&#xff0c;发现了解决办法 确认没有firefo…

深入react技术栈(5):React生命周期

我是歌谣 放弃很容易 但是坚持一定很酷 微信搜一搜前端小歌谣 React生命周期 挂载和卸载过程 组件得挂载 组件得卸载 数据更新过程 整体流程 文章参考深入学习React技术栈

戴尔看好Ubuntu超越Windows的十个优势

戴尔近日总在对比Linux开源系统&#xff08;主要是Ubuntu&#xff09;与Windows的功能&#xff0c;列举了Ubuntu比 Windows的独特之处&#xff0c;例如&#xff0c;预装了免费办公软件OpenOffice&#xff0c;启动速度快&#xff0c;可以获取1000多款免费软件等。当然了&#xf…

java jdk 1.8特性_Java JDK1.8新特性之四大函数式接口

JDK 1.8的一些新特性四大核心函数式接口(Consumer、Predicate、Supplier、Function)&#xff0c;结合lambda表达式import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.function.Function;import java.util.function.Predicate;import…

ORA-32004: obsolete and/or deprecated parameter(s) specified

From: http://www.cnblogs.com/rootq/archive/2008/10/23/1318290.html 在系统启动的时候,报错 SQL> startup; ORA-32004: obsolete and/or deprecated parameter(s) specified ORACLE 例程已经启动。 Total System Global Area 289406976 bytes Fixed Size …

深入react技术栈(7):组件化实例:Tab栏组件

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注前端小歌谣 文章参考深入React技术栈