iOS 中drawRect与drawLayer:InContext:方法调用

  最近研究绘图框架Core Graphics时,无法避免的涉及到了drawRect:与drawLayer:InContext方法。

参考文章
iOS的绘图之drawRect和drawLayer:inContext
通过这篇文章中对drawRect:以及drawLayer:InContext的实践,再加上亲自运行文章中demo反复验证。得出一下几点结论:(结论大体上与参考文章一致,但也有自己的一些思考)
当一个view被addSubview到其他view上时
1. 先隐式地把view的layer的CALayerDelegate设置为view。
2. 调用此view的layer的drawInContext方法。
3. 由于drawLayer:InContext方法的注释:If defined, called by the default implementation of -drawInContext: (如果被定义了,在方法drawInContext:默认实现中被调用)
  说明了drawInContext里if([self.delegate responseToSelector:@selector(drawLayer:inContext:)])时就执行drawLayer:inContext:方法,这里我们因为实现了drawLayer:inContext:所以会执行。
4. [super drawLayer:layer inContext:ctx]会让系统自动调用此view的drawRect:方法。
至此,view的隐式layer被绘制出来。

  但是这其中有一个很有意思的地方假如不重写drawRect:方法,view的隐式layer中的drawInContext是不会被调用的,个人猜测在该addSubview中做了处理。(当然假如你实在不想重写系统的drawRect:方法,你也可以用view的layer调用setNeedsDisplay方法去自己调用drawInContext方法)

5. 当view得隐式layer绘制完成,系统将继续绘制subLayer。当调用[layer setNeedsDisplay];时会自动调用此layer的drawInContext方法。
PS:drawInContext方法不能手动调用,只能通过这个方法让系统自动调用

写在最后

框架学习中,各种细小的知识点,慢慢积累,努力成长!!!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,551评论 6 30
  • 转载:http://www.jianshu.com/p/32fcadd12108 每个UIView有一个伙伴称为l...
    F麦子阅读 6,288评论 0 13
  • 每个UIView有一个伙伴称为layer,一个CALayer。UIView实际上并没有把自己画到屏幕上;它绘制本身...
    shenzhenboy阅读 3,137评论 0 17
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 5,141评论 5 13
  • 每次一到期末考试周的前几天 就慌了 明明天天也在熬夜抱佛脚的背书 却总是觉得什么都记不住 大一的期末 再也回不到高...
    Gemyz阅读 138评论 0 0