CALayer的那些事(二)

这一篇是关于CALayer的自定义:

不管时UIView还是CALayer,绘制图形的步骤都差不多分这三步:

(1)获取上下文

(2)绘制图形

(3)渲染图形

注意点:

(1)CALayer里绘制的图形默认为无色,不会显示。要想让绘制的图形显示出来,还需要设置图形的颜色。注意不能直接使用UI框架中的类

(2)在自定义layer中的-(void)drawInContext:方法不会自己调用,只能自己通过setNeedDisplay方法调用,在view中画东西DrawRect:方法在view第一次显示的时候会自动调用。

说明:在UIView中绘制图形,获取的上下文就是这个view对应的layer的上下文。在渲染的时候,就是把图形渲染到对应的layer上。在执行渲染操作的时候,本质上它的内部相当于执行了 [self.layer drawInContext:ctx];

当然还有第二种方法(代理) 设置CALayer的delegate,然后让delegate实现drawLayer:inContext:方法,当CALayer需要绘图时,会调用delegate的drawLayer:inContext:方法进行绘图。(这里要注意的是delegate不能指定为当前的View,因为它已经是子层的代理了,这里设置为其他的代理会出问题,具体操作参考http://www.cocoachina.com/industry/20140115/7703.html)

时间: 2024-10-09 21:50:44

CALayer的那些事(二)的相关文章

spring-simple- memcache那些事二

spring-simple- memcache那些事二 maven依赖 <!-- simple-spring-memcached --> <dependency> <groupId>com.google.code.simple-spring-memcached</groupId> <artifactId>simple-spring-memcached</artifactId> <version>3.5.0</vers

CALayer的那些事(一)

CALayer对于工作过一段时间的程序员来说一定是熟悉的不能再熟悉了,但是对于一些接触iOS并不久的人来说还是比较新鲜的,就像我.再加上之前在学习时并没有接触过CALayer,所以这个东西对我来说完全就是新东西了.花了点时间看了下,就此总结一些需要注意的地方,以便日后用到时再详阅. 使用前需要注意的: 1.UIView和CALayer的选择 其实,对比CALayer,UIView多了一个事件处理的功能.也就是说,CALayer不能处理用户的触摸事件,而UIView可以. 所以,在选择的过程中,需

app 性能优化的那些事(二)

来源:树下的老男孩 链接:http://www.jianshu.com/p/2a01e5e2141f 这次我们来说说iOS app中滑动的那些事.iOS为了提高滑动的流畅感,特意在滑动的时候将runloop模式切换到UITrackingRunLoopMode,在这个过程中专心做跟滑动相关的工作,这也就是在滑动过程中为什么nstimer无法工作的原因,因为两个没在同一mode下面.但我们可能经常会遇到滑动不怎么流畅的情况,比如在项目中碰到在滑动tableview的时候不怎么顺畅,感觉有点不爽,即便

XLT格式化XML那点事(二)

接上篇<XML通过XSL格式化的那点事(XML到自定义节点折叠显示)>,本文就如何将大的XLST分割成小文件和如何用C#将XML通过XSL生成HTML文件中的问题做下分析,避免有同样需求的朋友走弯路. Import的使用 <xsl:Import> 元素必须在第一个节点 如何避免输出SelfClose的非法元素   简单繁琐的办法 <script type="text/javascript" src="nowhere.js"> &l

超链接的那些事(二): 属性href

a标签的属性之一 href 1. 定义 href 属性用于指定超链接目标的 URL. 2. 用法     ①. 锚点 同一页面添加锚点 (1)<a href="#test">连接到本页面的锚的超链接</a>   //点击的连接 (2)<a name="test">锚</a>   //放到要跳转内容的地方 跨页面添加锚点         (1)在test2.html创建锚<a name="test&quo

[iOS Animation]-CALayer 定时器动画演示二

Run Loop 模式 注意到当创建CADisplayLink的时候,我们需要指定一个run loop和run loop mode,对于run loop来说,我们就使用了主线程的run loop,因为任何用户界面的更新都需要在主线程执行,但是模式的选择就并不那么清楚了,每个添加到run loop的任务都有一个指定了优先级的模式,为了保证用户界面保持平滑,iOS会提供和用户界面相关任务的优先级,而且当UI很活跃的时候的确会暂停一些别的任务. 一个典型的例子就是当是用UIScrollview滑动的时

Linux命令的那些事(二)

回顾Linux(一) 学习了以下命令: mkdir/rmdir/ls/rm/pwd/cd/touch/tree/man/--help 想具体了解请看上一篇文章跳转 在Linux中推荐大家使用sublime text3作为文本编辑器 启动命令: subl 或subl 文件路径名 作用: 用来编写无格式的纯文本文件 sublime 的快捷操作 打开和隐藏侧边栏 view --> Side Bar -->Show/Hide sidebar ctrl + k b 字体的放大和缩小:ctrl + '+'

软件架构师应该知道的97件事(二)

11 架构师需要宏观上设计,微观上了解业务代码.宏观视野和微观视野 12 没有万能的解决方案,需要存在情景意识 13 提前考虑性能问题,考虑未来的变化 14 架构:系统建模,接口设计,模块划分,套用设计模式,优化性能.需要平衡:安全,易用,产品支持,发布管理,部署方式. 需要平和技术需求和各类业务需求 15 功能测试,避免草率的提交任务. 16 技术可能唯一.业务是不断演化的,没有一成不变的业务系统 17 业务为重.既要考虑架构,也要考虑业务. 18 先保证方案简单可以,再考虑通用型和复用性 1

iOS核心动画Core Animation(二)

一. 使用核心动画实现动画效果的步骤 ■1. 创建动画对象 ■2. 设置动画属性 ■3. 把动画对象添加到某个 CALayer 对象上 ■4. 需要停止动画:可以调用 remove 方法移除动画 具体步骤 1.使用它需要先添加QuartzCore.framework框架和引入主头文件<QuartzCore/QuartzCore.h> 2.初始化一个CAAnimation对象,并设置一些动画相关属性 3.通过调用CALayer的addAnimation:forKey:方法增加CAAnimatio