美文网首页
CALayer 和 UIView

CALayer 和 UIView

作者: 纳兰沫 | 来源:发表于2019-01-04 14:20 被阅读9次

不是作者原著 来自摘抄

参考文献

详解 CALayer 和 UIView 的区别和联系
理解Frame
详解 CALayer 和 UIView 的区别和联系

理解Frame

iOS控件之bounds与frame

这将是你最后一次纠结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进行的动画
image

相关文章

网友评论

      本文标题:CALayer 和 UIView

      本文链接:https://www.haomeiwen.com/subject/mvzcrqtx.html