2 - CALayer的寄宿图(图层中包含的图)

contents

    可以设置寄宿图
    layer.contents = (__bridge id)image.CGImage;

contentGravity

    对应与UIView的 contentMode 属性, 目的是为了决定内容在图层的边界 中怎么对齐
    UIView大多数视觉相关的属性比如 contentMode ,对这些属性的操作其实是对对应图层的操作
    
    self.layerView.layer.contentsGravity = kCAGravityResizeAspect;
    其它设置参见文档

contentsScale

    属性定义了寄宿图的像素尺寸和视图大小的比例,默认情况下它是一个值为1.0的浮点数
    它用来判断在绘制图层的时候应该为寄宿图创建的空间大小,和需要显示 的图片的拉伸度
    如果设置为1.0,将会以每个点1个像素绘制图片,如果设置为 2.0,则会以每个点2个像素绘制图片,
    这就是我们熟知的Retina屏幕。当我们设置了contentGravity的时候一般情况下是没有影响的
    因为contentGravity设置了拉伸的时候,并不考虑分辨率的问题。而当设置contentGravity为
    kCAGravityCenter(这个值不会拉伸图片),那么这个时候就会产生影响,我们用UIImage读取的是
    高分辨率的图片,而这里contentScale设置为1,就会造成过大的情况。
    
    说到底同样的视图大小,设置不同的contentScale值,就可以得到不同分辨率的图片
    layer.contentsScale = [UIScreen mainScreen].scale;

maskToBounds

    对应与UIView的 clipsToBounds 这个属性,不用多说

contentsRect

    CALayer的 contentsRect 属性允许我们在图层边框里显示寄宿图的一个子域。
    这涉及到图片是如何显示和拉伸的,所以要比 contentsGravity 灵活多了
    
    注意它使用单位坐标
    

屏幕快照 2016-01-22 下午3.46.14

contentsCenter

    它定义了一个固定的边框和一个在图 层上可拉伸的区域。 改变 contentsCenter
    的值并不会影响到寄宿  图的显示,除非这个图层的大小改变了,你才看得到效果
    

屏幕快照 2016-01-22 下午3.46.39

在Interface Builder中可以设置这个值
屏幕快照 2016-01-22 下午3.48.02

Custom Drawing
给contents赋CGImage的值不是唯一的设置寄宿图的方法,我们可以直接用Core Graphics
绘制寄宿图

1、能够通过继承UIView并实现 -drawRect: 方法 来自定义绘制

屏幕快照 2016-01-22 下午3.56.56

2、CALayer代理的方式
屏幕快照 2016-01-22 下午4.03.33

注意这里的:CALayer会请求它的代理给他一个寄宿图来显示,如果没有实现这个方法,才会去自己生成一个
孔的寄宿图

3、自己调用 -(void)dranLayer:inContext:方法
屏幕快照 2016-01-22 下午4.06.47

PS:
除非你创建了一个单独的图层,你几乎没有机会用到CALayerDelegate协议。因为当UIView创建了它的 宿主图层时,它就会自动地把图层的delegate设置为它自己,并提供了一个 - displayLayer: 的实现,那所有的问题就都没了。

当使用寄宿了视图的图层的时候,你也不必实现 -displayLayer: 和 - drawLayer:inContext: 方法来绘制你的寄宿图。通常做法是实现UIView的 - drawRect: 方法,UIView就会帮你做完剩下的工作,包括在需要重绘的时候调用-display 方法

即:除非你自己创建单独的图层,且图层没有寄宿图的时候,你才会用到这个方法

 

转载于:https://www.cnblogs.com/Big-Ding/p/CALayer-de-ji-su-tu-tu-ceng-zhong-bao-han-de-tu.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值