CGAffineTransform(仿射变换)是作用于UIViews的2D操作,而CATransform3D是作用于CALayers的更复杂的3D操作,这两种变换可以转换。...随便说一句锚点的位置很重要,经常会左右动画的效果 CATransform3D有着与CGAffineTrans类似的一组API,但他们有个重要的区别在于CATransform3D的效果只能加在layer的...t); 5、CATransform3D与CGAffineTransform的转换 CGAffineTransform是UIKit框架中一个用于变换的矩阵,其作用与CATransform类似,只是其可以直接作用于...(CGAffineTransform m); //判断一个CATransform3D是否可以转换为CAAffineTransform bool CATransform3DIsAffine (CATransform3D...t); //将CATransform3D转换为CGAffineTransform CGAffineTransform CATransform3DGetAffineTransform (CATransform3D
(CATransform3D a, CATransform3D b); 1、平移变换 //返回一个平移变换的transform3D对象 tx,ty,tz对应x,y,z轴的平移 CATransform3D...3、旋转变换 //angle参数是旋转的角度,为弧度制 0-2π //x,y,z决定了旋转围绕的中轴,取值为-1——1之间,例如(1,0,0),则是绕x轴旋转(0.5,0.5,0),则是绕x轴与y轴中...5、CATransform3D与CGAffineTransform的转换 CGAffineTransform是UIKit框架中一个用于变换的矩阵,其作用与CATransform类似,只是其可以直接作用于... (CGAffineTransform m); //判断一个CATransform3D是否可以转换为CAAffineTransform bool CATransform3DIsAffine (CATransform3D... t); //将CATransform3D转换为CGAffineTransform CGAffineTransform CATransform3DGetAffineTransform (CATransform3D
* Translate `t' by `(tx, ty)' and return the result: t' = [ 1 0 0 1 tx ty ] * t */ CG_EXTERN CGAffineTransform...CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty) CG_AVAILABLE_STARTING(__MAC...CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy) CG_AVAILABLE_STARTING(__MAC_10...CGAffineTransformRotate(CGAffineTransform t, CGFloat angle) CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE...didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end 3D仿射变换 根据名字我们可以知道,3D仿射变化与仿射变化的区别在于
2.3.1 UIView与动画相关的属性--与CGAffineTransform对应 下面是UIView的一些属性介绍 @property(nonatomic) CGRect frame...2.3.2 CALayer与动画相关的属性--与CATransform3D对应 下面是CALayer的一些属性介绍 //宽度和高度 @property CGRect bounds; //位置(默认指中点...与CATransform3D 2.4.1 CGAffineTransform操作API CGAffineTransform结构体定义 struct CGAffineTransform { CGFloat...与CGAffineTransform相互转换API //将一个CGAffinrTransform转化为CATransform3D CATransform3D CATransform3DMakeAffineTransform...t); //将CATransform3D转换为CGAffineTransform CGAffineTransform CATransform3DGetAffineTransform (CATransform3D
我们先来看下CATransform3D的头文件 struct CATransform3D { CGFloat m11, m12, m13, m14; CGFloat m21, m22, m23,...m24; CGFloat m31, m32, m33, m34; CGFloat m41, m42, m43, m44; }; typedef struct CATransform3D CATransform3D...; 可以看到CATransform3D是一个4 * 4结构体, 另外它还有一个弟弟CGAffineTransform是 3 * 3结构体 他们的区别看名字就很明显, CATransform3D是做3D坐标变换..., 经常适用于CALayer CGAffineTransform是做2D坐标变换, 经常适用于UIView CATransform3D这个结构体中, 我们使用最多的是m34 后面我们再来说这个, 先知道就好了...(CATransform3D a, CATransform3D b); //判断两个矩阵是否相同 CA_EXTERN CATransform3D CATransform3DMakeTranslation
不同点在于,CATransform3D作用与3维坐标系的坐标变换,CGAffineTransform作用于2维坐标系的坐标变换。...所以CGAffineTransform用于对UIView进行变换,而CATransform3D用于对CALayer进行变换。...=) 一脸无辜 所以呢,老司机直接来介绍CATransform3D的相关api吧。(CGAffineTransform的api与CATransform3D相似,可类比使用)。...与之相对的就是下面的api CATransform3DTranslate CATransform3DScale CATransform3DRotate 与之前三个api的不同点在于,这三个api都多了一个参数...与CATransform3D相互转化的api ---- CATransform3DIsIdentity CATransform3DEqualToTransform CATransform3DIsAffine
CGAffineTransform A structure for holding an affine transformation matrix....包含如下参数: struct CGAffineTransform { CGFloat a; CGFloat b; CGFloat c; CGFloat d; CGFloat tx; CGFloat ty...; }; typedef struct CGAffineTransform CGAffineTransform; 下面直观的描述这个这个矩阵和坐标之间的关系。...originTransform = CGAffineTransformIdentity; 坐标变换之后出现的问题 意识到CGAffineTransform所做的变换其实是对坐标系做的变换。...-(void)editImageWithRotation:(UIRotationGestureRecognizer*)sender { CGAffineTransform transfrom
UIView中的transform为CGAffineTransform类型。...struct CGAffineTransform { CGFloat a, b, c, d; CGFloat tx, ty; }; CALayer中的transform为CATransform3D...类型,而CALayer对应于UIView的transform属性叫做affineTransform struct CATransform3D { CGFloat m11, m12, m13, m14...计算的结果矩阵C的行数等于A的行数,列数等于B的列数(如A是m×n矩阵和B是n×p矩阵,它们的乘积C是一个m×p矩阵 ) 4.结果矩阵C的第 i 行第 j 列的元素Cij 等于矩阵A的第 i 行的元素与矩阵
再来看看方法: 向右移动300的仿射效果 CGAffineTransform translate = CGAffineTransformMakeTranslation(300, 0) 使用仿射基础方法...CGAffineTransform translate = CGAffineTransformMake(1,0,0,1,300,0) //CGAffineTransformMake(CGFloat a,...我写的DEMO:点这跳转,记得点Star 关于翻转和一些3D变化就需要 CATransform3D,下一章再讲解。
文本布局探讨之二——关于TextKit框架中的字体描述 一、引言 UIFont是iOS开发中处理文本字体的类,关于UIFont的相关内容,以前的一篇博客有详细介绍,本片博客主要介绍关于动态字体的应用与字体描述类...UIFontDescriptor对象,并且设置变换参数 + (UIFontDescriptor *)fontDescriptorWithName:(NSString *)fontName matrix:(CGAffineTransform...)matrix; CGAffineTransform是一个结构体,其用于文本的控件变换十分强大,在CoreAnimation框架中有CATransform3D这个结构体,CGAffineTransform...示例如下: //进行旋转 CGAffineTransform transfom = CGAffineTransformRotate(CGAffineTransformIdentity,...instancetype)initWithFontAttributes:(NSDictionary *)attributes; 字典中可以配置的键值如下: //需要配置为NSValue值 CGAffineTransform
其次,我们知道iOS平台的Cocoa Touch 是源于OS X平台的Cocoa),是在Cocoa的基础上添加了适用于移动手机设备的手势识别、动画等特性;但从底层实现上来说,Cocoa Touch与Cocoa...有两个数据类型用来表示transform,分别是CGAffineTransform和CATransform3D。前者作用于UIView,后者为layer层次的变换类型。...对于想要了解矩阵变换是如何作用实现的,可以参考这篇博客:CGAffineTransform 放射变换 在开始使用transform实现你的动画之前,我先介绍几个常用的函数: /// 用来连接两个变换效果并返回...返回的t = t1 * t2 CGAffineTransformConcat(CGAffineTransform t1, CGAffineTransform t2) /// 矩阵初始值。...self.transform, sx, sy) CGAffineTransformMakeScale(CGFloat sx, CGFloat sy) CGAffineTransformScale(CGAffineTransform
[1240] 收录:原文地址 前言 iOS 的动画框架很成熟,提供必要的信息,譬如动画的起始位置与终止位置,动画效果就出来了 动画的实现方式挺多的, 有系统提供的简单 API ,直接提供动画般的交互效果...约束动画要注意的是,确保动画的起始位置准确,起始的时候,一般要调用其父视图的 layoutIfNeeded 方法,确保视图的实际位置与约束设置的一致。...一般这种动画,我们用 Lottie * * * 例子十:文本变换动画 [image] 这个动画有些复杂,重点使用了 CoreAnimation 的组动画,叠加了五种效果,缩放、尺寸、布局、位置与透明度。...let animation = CABasicAnimation(keyPath: "transform") animation.fromValue = NSValue(caTransform3D...: oldLayer.transform) animation.toValue = NSValue(caTransform3D: newLayer.transform)
• 单位 —— 对于与图片大小或是图层边界相关的显示,单位坐标是一个方便的度量方式, 当大小改变的时候,也不需要再次调整。...CALayer同样也有一个transform属性,但它的类型是CATransform3D,而不是CGAffineTransform,本章后续将会详细解释。...和CGAffineTransform类似,CATransform3D也是一个矩阵,但是和2x3的矩阵不同,CATransform3D是一个可以在3维空间内做变换的4x4的矩阵(图5.6)。...图5.6 对一个3D像素点做CATransform3D矩阵变换 和CGAffineTransform矩阵类似,Core Animation提供了一系列的方法用来创建和组合CATransform3D...但是与一般的标签比较而言会更加繁琐一些。
三、设置与调整Layer层的内容 设置层的内容有下面三种方式: 1.可以通过设置CGImage为layer的内容。 2.可以通过代理方法来动态修改或者绘制层的内容。...property CGPoint anchorPoint; //在Z轴上的锚点位置 3D变换时会有很大影响 @property CGFloat anchorPointZ; //进行3D变换 @property CATransform3D... transform; //获取和设置CGAffineTransform变换 - (CGAffineTransform)affineTransform; - (void)setAffineTransform...:(CGAffineTransform)m; //设置layer的frame @property CGRect frame; //设置是否隐藏 @property(getter=isHidden) BOOL...替换一个子layer - (void)replaceSublayer:(CALayer *)layer with:(CALayer *)layer2; //对其子layer进行3D变换 @property CATransform3D
CGAffineTransform UIView的transform属性是一个CGAffineTransform类型,用于在二维空间做旋转,缩放和平移。...CGAffineTransform是一个可以和二维空间向量(例如CGPoint)做乘法的3X2的矩阵。称为仿射变换,“仿射”的意思是无论变换矩阵用什么值,图层中平行的两条线在变换之后任然保持平行”。...官方定义: struct CGAffineTransform { CGFloat a, b, c, d; CGFloat tx, ty; }; 虽然结构体中只有a,b,c,d,tx,ty.../* 合并两个transform :t' = t1 * t2 */ CG_EXTERN CGAffineTransform CGAffineTransformConcat(CGAffineTransform...t1, CGAffineTransform t2) CG_AVAILABLE_STARTING
第一个是CGAffineTransform,它描述了如何旋转,缩放或剪切路径或视图。第二个是奇偶填充(even-odd fills),它使我们可以控制应如何渲染重叠的形状。...这背后的数学方法相对简单,只有一个需要注意点:CGAffineTransform以弧度而非角度来度量角度。...一旦您看到代码正在运行,这将更有意义,但是首先我想再添加三个小东西: 旋转然后移动的东西不会产生与移动然后旋转的结果相同的结果,因为先旋转时,它的移动方向将与未旋转时的不同。...如果第三个路径与前两个路径重叠,则会被填充。 …等等。 仅实际重叠的部分受此规则影响,并且会产生一些非常漂亮的结果。...译自Transforming shapes using CGAffineTransform and even-odd fills
CGPoint |position;| 默认情况下相当于UIView的center @property CGPoint |anchorPoint;| position的锚点 @property CATransform3D...为了做一些修正,我们需要引入投影变换(又称作z变换)来对除了旋转之外的变换矩阵做一些修改,Core Animation并没有给我们提供设置透视变换的函数,因此我们需要手动修改矩阵值,幸运的是,很简单:CATransform3D...“ios核心动画高级技巧.” iBooks. struct CATransform3D{ CGFloat m11(x缩放), m12(y切变), m13(旋转), m14()...m34(透视效果,要有旋转角度才能看出效果); CGFloat m41(x平移), m42(y平移), m43(z平移), m44; }; struct CGAffineTransform...{ CGFloat a, b, c, d; CGFloat tx, ty; }; // 定义矩阵 CATransform3D transform = CATransform3DIdentity
与frame 属性不同,position 属性指定的是图层的重点,而不是左上角: CGPoint lastDistancePosition = CGPointMake(100.0, 100.0);...lastDistance.layer.position = lastDistancePosition; 四、布局与显示 除了添加子图层之外,CALayer 类还提供了很多不同的方法,可以来插入、...roleview.layer.transform = CATransform3DMakeScale( -1.0,-1.0,1.0); CGAffineTransform transform = CGAffineTransformMakeRotation...CATransform3D 函数族是苹果的Cover Flow 技术 以及 iPhone 上使用的其他美观特效的幕后力量。iPhone 支持包括缩放、旋转、仿射、平移等。...Quartz Core 框架用 CATransform3D 对象来执行变换。这个对象作用于视图的图层,根据期望的三维设置对图层进行弯折或者其他操作。
4、layer的 CATransform3D属性变换 UIView和Layer都有transform属性,但是他们的所属有区别,类型也有区别 1.picView.transform是二维的属性,是...CGAffineTransform类型 2.picView.layer.transform是layer级别的三维属性,是CATransform3D类型的,当然也可以做二维的事情,只有旋转的时候才可以看出
CGPoint center; //配置item的尺寸 @property (nonatomic) CGSize size; //配置item的3D效果 @property (nonatomic) CATransform3D...bounds @property (nonatomic) CGRect bounds NS_AVAILABLE_IOS(7_0); //配置item的旋转 @property (nonatomic) CGAffineTransform
领取专属 10元无门槛券
手把手带您无忧上云