CALayer的contents系列属性

其实不管是什么UIView,在显示的时候都变成了一张图片。在前一篇说到UIView的绘图都是内部的CALayer的作用。CALayer的内部又有一个属性叫contens。我们称之为寄宿图。本篇文章主要介绍一系列有关contents的属性。

1. contents

   首先从contents属性开始说起,网上其实关于contents的讨论还是比较多的,它就是用来显示最终被渲染成的图片。这里只总结关于它是 id 类型的事情。
   这个id类型其实只能是在OS X中使用,NSImage,你要是赋值UIIImage的对象,对不起,不行。于是你只能赋值为CGImage,但是CGImage不属于cocoa对象。因此要赋值一张图片的话,需要如下使用:

layer.contents = (__bridge id)image.CGImage;

   contents指向的是一块缓存,该缓存存储的是图像的bitmap,在渲染的程序中,会将该数据发送到渲染的进程中,被解析并展示到屏幕上。这些都是后话了,首先我们先学会用这个吧。下面挨个介绍与contents有关的属性。

2. contentGravity

   我们知道view的属性中有一个contentMode。它来控制当视图的几何形状发生变化的时候如何复用它的内容,当view第一次被显示出来,它会将自己的内容渲染被位图持有。在那之后,改变view的几何结构将并不能导致位图被重新创建(绘制)。但是属性值contentMode决定了bitmap是否缩放、位置在哪儿(固定在左边、右边、上面、下面、居中)。默认情况下,contentMode的值是UIViewContentModeScaleToFill。

typedefNS_ENUM(NSInteger, UIViewContentMode) {
    UIViewContentModeScaleToFill,			// 缩放图片,使图片充满容器,属性会导致图片变形。
    UIViewContentModeScaleAspectFit,      	// 会保证图片比例不变,而且全部显示在ImageView中,这意味着ImageView会有部分空白,不会填充整个区域。
    UIViewContentModeScaleAspectFill,     	// 也会证图片比例不变,但是是填充整个ImageView的,可能只有部分图片显示出来。
    //	剩下和位置相关联
    UIViewContentModeRedraw,              // redraw on bounds change (calls -setNeedsDisplay)
    UIViewContentModeCenter,              // contents remain same size. positioned adjusted。居中显示
    UIViewContentModeTop,
    UIViewContentModeBottom,
    UIViewContentModeLeft,
    UIViewContentModeRight,
    UIViewContentModeTopLeft,
    UIViewContentModeTopRight,
    UIViewContentModeBottomLeft,
    UIViewContentModeBottomRight,
};

下面给一张官方的图吧。
在这里插入图片描述
   这只是UIView的contenMode,下面说一说contentGravity的这个属性。这个其实就是contentMode对应的属性,只不过该属性不是枚举,而是NSString

kCAGravityCenter
kCAGravityTop
kCAGravityBottom
kCAGravityLeft
kCAGravityRight
kCAGravityTopLeft
kCAGravityTopRight
kCAGravityBottomLeft
kCAGravityBottomRight
kCAGravityResize
kCAGravityResizeAspect
kCAGravityResizeAspectFill

3. contentsScale

   在之前的文章【地址】中说到到了UIImage的scale,也就是一个点应该用几个像素点来显示。尤其在拉伸图片的时候,很容易丢失图片分辨率的开率,因此会导师图片不清晰,因此在处理寄宿图,或者我们自己根据图片在画一张图片的时候(Core Graphics)的时候,需要设置image的scale或者layer的这个属性。
举例子:

layer.contentsScale = [UIScreen mainScreen].scale;

4. makeToBounds

   UIView有一个属性叫clipsToBounds,这个属性可以决定是否显示超出边界的内容。在CALayer中叫做makeToBounds

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值