不是作者原著 来自摘抄
参考文献
详解 CALayer 和 UIView 的区别和联系
理解Frame
详解 CALayer 和 UIView 的区别和联系
这将是你最后一次纠结position与anchorPoint!
View-Layer 协作
彭序猿
iOS 浅谈UIView 和 CAlayer
码农iOS的博客
UIView CALayer
UIView
负责响应事件
CALayer
负责绘制UI
anchorPoint
相对于当前Layer的一个点
position
是layer中anchorPoint锚点在superLayer中的一点
单独修改position和anchorPoint中任何一个属性都不影响另一个属性
通用公式
position.x = frame.origin.x + anchorPoint.x * bounds.size.width;
position.y = frame.origin.y + anchorPoint.y * bounds.size.height;
frame.origin.x = position.x - anchorPoint.x * bounds.size.width;
frame.origin.y = position.y - anchorPoint.y * bounds.size.height
UIView是CALayer的代理
//绘制相关
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx;
//动画相关
- (nullable id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event;
在做ios动画的时候 修改非RootLayer的属性(譬如位置 背景色等) 会默认产生隐式动画 修改UIView则不会
只有当属性改变发生在动画block中 view才会返回实际的动作

如果要设置某个类的代理 但是,代理没要求我们遵守什么特定的协议,可以认为这个协议方法是NSObject里边的
CAAnimation
是对layer进行操作的动画UIView的动画
是对CALayer的presentLayer
进行动画UIView的动画过程实际上是layer.presentLayer的变化过程 对于UIView是直接就更改到指定位置了
隐式动画
主要属性值改变了 这个属性从当前值到目标值就会有一个动画改变的过程 无需额外操作在iOS中无论是什么方式进行的动画其实都是layer进行的动画
网友评论