CALayer与UIView亲密关系

20210406 福州 微风  冷

30岁后,要明白自己付出的每个动作是否如演员搬得精准,观众的反应。

白板开发过程中,遇到再cashaperlayer层绘制,超出UIview问题。今天总结下,这个图层源码能力。多余话网上都有,只关注容易忽略点。

iOS理念,视图都是由UIView基类派生而来,UIView支持事件响应、CG绘图、仿射变换以及各种动画。CALayer是不能够响应事件的。

CALayer 可以通过id类型的contents属性设置图,虽然我们给contents属性任何值都能编译通过,但是CALayer还是比较任性的,它只接受CGImage类型的值,其它类型值它都将显示空白。

Layer.contents = (__bridge id)[UIImage imageNamed:@"dk.jpeg"].CGImage;

UIImage本身已经将这种显示比例关系处理好了,所以一张图片在不同设备上显示的大小是相同的,但是耿直的CGImage并没有做这种处理,这时就需要我们手动的控制contentsScale属性来达到想要的效果。

Layer.contentsScale = image.scale;

 

UIView和CALayer的区别--网络

  • UIView可以响应事件,CALayer不可以响应事件;
  • 一个 Layer 的 frame 是由它的 anchorPoint,position,bounds,和 transform 共同决定的,而一个 View 的 frame 只是简单的返回 Layer的 frame。
  • layer独有功能: 阴影,圆角,带颜色的边框的设置;3D变换;非矩形范围;透明遮罩;多级非线性动画;
  • UIView主要是对显示内容的管理, CALayer 主要侧重显示内容的绘制;UIView本身没有显示的能力,是它内部的CALyer图层才有了显示功能。
  • Layer 比 View 多了个AnchorPoint

平时当我们改变UIView的frame的时候,实际上是在改变视图中layer的frame

通常情况下,frame的宽高和bounds的宽高是相同的,但是当改变了transform的时候,frame的宽高和bounds的宽高可能就不再相同了。原因网络查询。

CALayer提供了两个方法:-containsPoint:-hitTest:

containsPoint 图层范围内,就返回YES

hitTest 返回值不是BOOL类型了,而是图层本身

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值