iphone动画介绍
CGAffineTransform rotation = CGAffineTransformMakeRotation(M_PI_2);
[xxx setTransform:rotation];
呵呵就这么简单的两行代码就可以实现了!
顺便记录一些常量,以后用的着!
#define M_E 2.71828182845904523536028747135266250 e
#define M_LOG2E 1.44269504088896340735992468100189214 log 2e
#define M_LOG10E 0.434294481903251827651128918916605082 log 10e
#define M_LN2 0.693147180559945309417232121458176568 log e2
#define M_LN10 2.30258509299404568401799145468436421 log e10
#define M_PI 3.14159265358979323846264338327950288 pi
#define M_PI_2 1.57079632679489661923132169163975144 pi/2
#define M_PI_4 0.785398163397448309615660845819875721 pi/4
#define M_1_PI 0.318309886183790671537767526745028724 1/pi
#define M_2_PI 0.636619772367581343075535053490057448 2/pi
#define M_2_SQRTPI 1.12837916709551257389615890312154517 2/sqrt(pi)
#define M_SQRT2 1.41421356237309504880168872420969808 sqrt(2)
#define M_SQRT1_2 0.707106781186547524400844362104849039 1/sqrt(2)
from:http://donbe.blog.163.com/blog/static/138048021201061054243442/
CGAffineTransformMakeTranslation(width, 0.0);是改变位置的,
CGAffineTransformRotate(transform, M_PI);是旋转的。
CGAffineTransformMakeRotation(-M_PI);也是旋转的
transform = CGAffineTransformScale(transform, -1.0, 1.0);是缩放的。
view.transform = CGAffineTransformIdentity;线性代数里面讲的矩阵变换,这个是恒等变换
当你改变过一个view.transform属性或者view.layer.transform的时候需要恢复默认状态的话,记得先把他们重置可以使用view.transform = CGAffineTransformIdentity,或者view.layer.transform = CATransform3DIdentity,假设你一直不断的改变一个view.transform的属性,而每次改变之前没有重置的话,你会发现后来的改变和你想要的发生变化了,不是你真正想要的结果
3
Quartz转换实现的原理:Quartz把绘图分成两个部分,
用户空间,即和设备无关,
设备空间,
用户空间和设备空间中间存在一个转换矩阵 : CTM
本章实质是讲解CTM
Quartz提供的3大功能
移动,旋转,缩放
演示如下,首先加载一张图片
void CGContextDrawImage (
CGContextRef c,
CGRect rect,
CGImageRef image
);
移动函数
CGContextTranslateCTM (myContext, 100, 50);
旋转函数
include <math.h>
static inline double radians (double degrees) {return degrees * M_PI/180;}
CGContextRotateCTM (myContext, radians(–45.));
缩放
CGContextScaleCTM (myContext, .5, .75);
翻转, 两种转换合成后的效果,先把图片移动到右上角,然后旋转180度
CGContextTranslateCTM (myContext, w,h);
CGContextRotateCTM (myContext, radians(-180.));
组合几个动作
CGContextTranslateCTM (myContext, w/4, 0);
CGContextScaleCTM (myContext, .25, .5);
CGContextRotateCTM (myContext, radians ( 22.));
CGContextRotateCTM (myContext, radians ( 22.));
CGContextScaleCTM (myContext, .25, .5);
CGContextTranslateCTM (myContext, w/4, 0);
上面是通过直接修改当前的ctm实现3大效果,下面是通过创建Affine Transforms,然后连接ctm实现同样的3种效果
这样做的好处是可以重用这个Affine Transforms
应用Affine Transforms 到ctm的函数
void CGContextConcatCTM (
CGContextRef c,
CGAffineTransform transform
);
Creating Affine Transforms
移动效果
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
);
CTM真正的数学行为
这个转换矩阵其实是一个 3×3的 举证
如下图
下面举例说明几个转换运算的数学实现
x y 是原先点的坐标
下面是从用户坐标转换到设备坐标的计算公式
下面是一个identity matrix,就是输入什么坐标,出来什么坐标,没有转换
最终的计算结果是 x=x,y=y,
可以用函数判断这个矩阵是不是一个 identity matrix
bool CGAffineTransformIsIdentity (
CGAffineTransform t
);
移动矩阵
缩放矩阵
旋转矩阵
旋转加移动矩阵
iphone动画介绍相关推荐
- unity3d iPhone文件目录介绍
原地址:http://cl314413.blog.163.com/blog/static/190507976201210259126559/ 如何查看iPhone文件存放目录?首先需要越狱,越狱后打开 ...
- iPhone详尽介绍与评测
iPhone详尽介绍与评测 自从苹果在今年的Macworld大会上揭开iPhone的面纱以来,整个业界对于iPhone的疑问和讨论就没有停止过,直到现在iPhone已经上市销售,这样的探讨也不会就此打 ...
- android动画介绍之 自定义Animation动画实现qq抖一抖效果
昨天我们介绍了Animation的基本用法.小伙伴们了解的怎么样了?如果还没有了解过Animation的小伙伴可以看看这篇博客 android动画介绍--Animation 实现loading动画效果 ...
- 前端笔记:动画介绍与CSS动画说明
文章目录 目的 动画介绍 CSS动画 JavaScript动画 Canvas动画 SVG动画 CSS动画 CSS Transition CSS Animation timing-function CS ...
- Android 动画 介绍与使用
读前思考 学习一门技术或者看一篇文章最好的方式就是带着问题去学习,这样才能在过程中有茅塞顿开.灯火阑珊的感觉,记忆也会更深刻. Android中有哪几种类型的动画? 帧动画在使用时需要注意什么? Vi ...
- 【Android】两种动画介绍(Tween动画、Frame动画)
Android中的动画类型有两种,一种是Tween动画.还有一种是Frame动画.Tween动画,这种实现方式可以使视图组件移动.放大.缩小以及产生透明度的变化;另一种Frame动画,传统的动画方法, ...
- svg 动画_svg 动画介绍(一)
今天讲svg的动画属性 animate.animateTransform.animateMotion(第一节) SVG 动画元素 animate.animateTransform.animateMot ...
- html2d动画,HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
交互性 SVG拥有良好的用户交互性,例如: 1. SVG能响应大部分的DOM2事件. 2. SVG能通过cursor良好的捕捉用户鼠标的移动. 3. 用户可以很方便的通过设置svg元素的zoomAnd ...
- SwiftUI——iOS15新版Animation制作动画介绍
从iOS 15.0开始,苹果废弃了之前的.animation(Animation?),建议开发者使用.animation(Animation?, value: Equatable)或者withAnim ...
最新文章
- 登顶Nature | DeepMind用AI首次实现数学领域重大进展,助力科学家证实两大猜想
- Android基础——四大组件之Activity
- 网络编程: 基于UDP协议的socket
- MySQL索引背后的数据结构及算法原理----惊叹的深入
- 【机器学习实战】——常见函数积累
- 通过Blazor使用C#开发SPA单页面应用程序(1)
- c语言汇编混编,c语言与汇编混编写法
- 【C++面向对象】类的数据成员:绑定、布局和存取
- 七年级认识计算机课件,认识计算机(七年级)ppt课件
- HDU1166 (线段树/修改点,询问区间)
- SpringMVC之安全性(三)Twitter登入
- curl针对HTTP的相关使用方法
- PAT Practice [1020 月饼]
- Ace Admin前端框架笔记二导航栏Navba
- iostream头文件简单理解
- 使用虚拟机镜像文件导入部署openGauss
- 银行业智能运维的探索与实践
- 文献关联分析图谱——connected papers网站
- PRML勘误表2011
- 软件测试理论与经验--阅读笔记