开头

为什么我要写就contentsCenter这个属性做一个记录呢?!因为我在学习这个属性的时候,理解了好久,到现在,有点头绪,记录下来,希望有帮助。

缘由

偶然看到gitbook上有iOS Core Animation: Advanced Techniques中文译本,所以准备好好学习学习,这里也推荐给有需要的朋友,我自己只看到了contents属性那块,也正是看里面有关于contentsCenter属性的内容看得一头雾水,所以才想要写这篇文章。

先来看看文档里是怎么介绍contentsCenter这个属性的吧!

原文

contentsCenter

本章我们介绍的最后一个和内容有关的属性是contentsCenter,看名字你可能会以为它可能跟图片的位置有关,不过这名字着实误导了你。contentsCenter其实是一个CGRect,它定义了一个固定的边框和一个在图层上可拉伸的区域。 改变contentsCenter的值并不会影响到寄宿图的显示,除非这个图层的大小改变了,你才看得到效果。 默认情况下,contentsCenter{0, 0, 1, 1},这意味着如果大小(由conttensGravity决定)改变了,那么寄宿图将会均匀地拉伸开。但是如果我们增加原点的值并减小尺寸。我们会在图片的周围创造一个边框。图2.9展示了contentsCenter设置为{0.25, 0.25, 0.5, 0.5}的效果。

图2.9

图2.9 contentsCenter的例子 这意味着我们可以随意重设尺寸,边框仍然会是连续的。他工作起来的效果和UIImage里的-resizableImageWithCapInsets:方法效果非常类似,只是它可以运用到任何寄宿图,甚至包括在Core Graphics运行时绘制的图形。

图2.10

图2.10 同一图片使用不同的contentsCenter

@interface ViewController ()@property (nonatomic, weak) IBOutlet UIView *button1;
@property (nonatomic, weak) IBOutlet UIView *button2;@end@implementation ViewController- (void)addStretchableImage:(UIImage *)image withContentCenter:(CGRect)rect toLayer:(CALayer *)layer
{  //set imagelayer.contents = (__bridge id)image.CGImage;//set contentsCenterlayer.contentsCenter = rect;
}- (void)viewDidLoad
{[super viewDidLoad]; //load button imageUIImage *image = [UIImage imageNamed:@"Button.png"];//set button 1[self addStretchableImage:image withContentCenter:CGRectMake(0.25, 0.25, 0.5, 0.5) toLayer:self.button1.layer];//set button 2[self addStretchableImage:image withContentCenter:CGRectMake(0.25, 0.25, 0.5, 0.5) toLayer:self.button2.layer];
}@end
复制代码

困惑

效果真的让人很看不懂,我一度以为那个阴影就是它的效果。

效果补充

首先,说明下下文中用到的图片尺寸为200*200,最上层图层,黄色:蓝色:黄色 = 1:2 :1,这个比例很重要。

接下来看看在相同尺寸下,不同的contentsCenter作用在这张图片中,会变现什么样的效果。

对比1

上下两个图片看起来一样,虽然他们的contentsCenter不同。为什么会这样呢?因为图片的尺寸刚好就是200*200,而且下图的contentsCenter为(0.25, 0.25, 0.5, 0.5),而0.25就是黄色色块的宽度在整个图片中的宽度占比,所以看起来两张图没有区别。


接下来的三组图,将展示图二在尺寸分别为100*100,250*250,300*300的情况,与图一的区别。

对比2

对比3

对比4

我认为在三组对比图中,最为直观的一个点就是,黄色色块的大小一直没变。变的只有绿色,蓝色及红色色块。

让我们来回头看看这张图。

我特意用红线将整个图片的分布标明,意在表现出一种阻断的效果。意思是,只有四个角是被完全限制住的,不能延展。而因为图片的特殊性,图中的红线恰好能见例子中用到的图片中的色块完整单独的分离开。这样,我们应该不难理解,为什么黄色色块的大小在上面的例子中是固定的。这就类似与利用九切片机型切图。

结束语

到这里,我们可能大概了解contentsCenter这个属性的效果了,至于怎么用,那就看实际应用场景了。通过这个属性,我们也可以看到,CALayer中还是有许多好用的属性等待我们去发掘的。大家如果有用得好用的属性和方法,希望可以写在留言区,共同交流学习。

鉴于本人的知识有限,文章必有纰漏,望大家可以见谅,不吝指出。

转载于:https://juejin.im/post/5bc99b5ce51d450e9c55dee5

CALayer学习--contentsCenter属性相关推荐

  1. [分享]iOS开发-UI篇:CAlayer层的属性

    iOS开发UI篇-CAlayer层的属性 一.position和anchorPoint 1.简单介绍 CALayer有2个非常重要的属性:position和anchorPoint @property ...

  2. iOS开发UI 篇—CAlayer层的属性

    一.position和anchorPoint 1.简单介绍 CALayer有2个非常重要的属性:position和anchorPoint @property CGPoint position; 用来设 ...

  3. CAlayer层的属性

    iOS开发UI篇-CAlayer层的属性 一.position和anchorPoint 1.简单介绍 CALayer有2个非常重要的属性:position和anchorPoint @property ...

  4. 【每周CV论文推荐】 初学深度学习人脸属性分析必读的文章

    欢迎来到<每周CV论文推荐>.在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的. 人脸属性分析在社交娱乐,人机交互等领域有重要 ...

  5. jQuery学习之六---属性

    玩了一天,不行了,我得好好学习,打眼一看,现在都晚上九点了,打开电脑,更博文啊,毕竟我们大家都是那么的好学,对不对,羞羞~ 今天我们一起来看看jquery的属性的用法,加油,我们一起(真诚脸ing-- ...

  6. jQuery 从零开始学习 (三) 属性与css样式

    一.摘要 本篇文章讲解如何使用jQuery获取和操作元素的属性和CSS样式. 其中DOM属性和元素属性的区分值得大家学习. 二.前言 无论是通过选择器选取对象, 或者从包装集中删除,过滤元素. 本章将 ...

  7. Vue学习-常用属性(一)

    前言: 作为后端转前端程序员,一直都不会Vue 只会用jQuery,说来惭愧,最近项目写完了 抽空学习了Vue,大爱!把最近的学习总结一下 . v-cloak ----解决页面刷新 显示插值 [v-c ...

  8. java propertygrid_ExtJS4.2学习(九)属性表格控件PropertyGrid

    PropertyGrid是在上节我们说的Editor的基础上开发的更灵活的高级表格组件,下面我们来看下它的功能和应用方式: 属性表格扩展自EditGrid,所以可以直接编辑右边的内容.注意,只有右边的 ...

  9. qml学习---------------Button属性

    本来学习了qml中的button,其实qml中的button跟qtQPushButton以及其他语言中的按钮是相同的. 首先通过一个简单的例子来学习button. import QtQuick 2.2 ...

最新文章

  1. java jdk 1.8 安装_下载、安装、配置 java jdk1.8
  2. tornado 学习笔记15 _ServerRequestAdapter分析
  3. spring-boot项目打包时候出现boot-inf文件夹的问题
  4. sdn体系的三个平面_软件定义网络基础---SDN控制平面
  5. java socket 报文解析_java socket解析和发送二进制报文工具(附java和C++转化问题)
  6. some fragments
  7. dataframe中多列除以不同列_Python之DataFrame切片与索引实验
  8. CentOS6.5安装与配置Mysql数据库
  9. Kubernetes 弃用 Docker刷爆了网络,我们公司也慌了!
  10. vs 2012/2013 等工具中,使用正则表达式,查找、替换
  11. 软考中级软件设计师考试大纲
  12. Tracepro中up vector和normal vector的定义2
  13. IMG2SMI: 将分子图像翻译成SMILES
  14. 超赞Win10日历悬停效果,爱了爱了(使用HTML、CSS和vanilla JS)
  15. 原生JS实现飞机大战游戏 超详细解析 快来做一个自己玩吧
  16. linux 内核 面试,LINUX内核经典面试题
  17. 我又被开了?测试工程师核心竞争力几个方面,反之是你开的“他“......
  18. 【解决方案】PicGo图片上传失败问题【少走弯路】
  19. 机械键盘,让你的手指爱上打字
  20. Flink(十六)—— Flink parallelism 和 Slot 介绍

热门文章

  1. Java Java Java
  2. 实验一 命令解释程序的编写
  3. 【动态规划】【数位DP】[PA 2015]Rownanie
  4. on the way
  5. ASP.NET 页面缓存 @ OutputCache
  6. 上线随想之2011-03-30
  7. 接口测试---mock变量自定义变量的使用
  8. [Linux]文件的atime ctime mtime
  9. java 原子量_JAVA线程10 - 新特性:原子量
  10. 八年程序员被裁了后,打脸上家公司,连斩六个offer