使用CALayer或者drawRect方法来绘制自定义View

转载 2015年07月06日 23:21:24

如下图,使用CALayer和drawRect两种方式创建两个完全一样的进度条(CALayer的进度条自动会有动画)。

3个按钮分别是减少值,改变颜色和增加值。


对于使用CALayer自定义控件的实现,一些外观方面的属性定义可以直接修改对应layer的属性,比如颜色。其次,属性变化需调用setNeedsLayout方法,而主要规划逻辑也定义在UIView的layoutSubviews方法中,通常是对CALayer位置(frame属性)的重新设置。

对于使用drawRect方法实现的自定义控件,则需要使用Quartz 2D中的函数来手动执行绘画。而任何属性变化则需要调用UIView的setNeedsDisplay方法从而重新间接调用drawRect方法来刷新控件(用户不可以直接调用drawRect方法来刷新控件)。

两种方法比较,使用CALayer实现相比使用drawRect方法通常更具优势,原因1:CALayer的属性变化默认会有动画。原因2:CALayer的属性变化本身就是实时的,所以有些操作可以不必要调用setNeedsLayout方法。而使用drawRect方法实现的话,唯一的刷新方法就是通过setNeedsDisplay方法来重新刷新下自己。因此,如果自定义控件可以使用CALayer实现,最好就用CALayer,如果不可以,则不得不使用drawRect来手动绘画了。

两种方法实现进度条的代码

网盘下载:http://pan.baidu.com/s/1mgwUUqW

另外,github上有一个使用CALayer来绘制曲线动画的例子,可以窥见CALayer实现是多么简单。

https://github.com/kevinzhow/PNChart

Android自定义View-canvas.drawRect()用法详解

提起自定义view,很让人心烦心累,但是我们又不得不去面对,欠下的总要还的,慢慢学吧. 开发中我们会遇到这种情况,上下滑动不带标题,左右滑动不带左右栏.这个时候如何处理,那么你就要好好学习一...
  • EaskShark
  • EaskShark
  • 2017年09月07日 15:30
  • 577

CGLayer和CALayer区别

CGLayer是一种很好的缓存常绘内容的方法。注意,不要与CALayer混淆。CALayer是Core Animation中更加强大、复杂的图层对象,而CGLayer是Core Graphics中优化...
  • meegomeego
  • meegomeego
  • 2013年11月07日 17:41
  • 4328

iOS 使用CALayer或drawRect创建自定义控件

如下图,使用CALayer和drawRect两种方式创建两个完全一样的进度条(CALayer的进度条自动会有动画)。 3个按钮分别是减少值,改变颜色和增加值。   对于使用C...
  • hxpp777
  • hxpp777
  • 2016年11月18日 11:01
  • 318

使用CALayer或者drawRect方法来绘制自定义View

如下图,使用CALayer和drawRect两种方式创建两个完全一样的进度条(CALayer的进度条自动会有动画)。 3个按钮分别是减少值,改变颜色和增加值。 对于使用...
  • sd19871122
  • sd19871122
  • 2015年07月06日 23:21
  • 461

iOS CALayer自定义

//DMLayer.m -(void)drawInContext:(CGContextRef)ctx { CGContextSetRGBFillColor(ctx, 1, 0, 0, 1); ...
  • caojengineer
  • caojengineer
  • 2015年04月14日 00:29
  • 219

iOS--Quartz2D使用(自定义UIImageView控件、绘制基本图形)

自定义UIImageView控件 一、实现思路 Quartz2D最大的用途在于自定义View(自定义UI控件),当系统的View不能满足我们使用需求的时候,自定义View。 使用Quar...
  • Nvermore_
  • Nvermore_
  • 2016年05月04日 16:23
  • 2673

关于自定义View 调用 canvas.drawRect画不出来矩形的原因

因为我理解错了其中参数的意思 canvas.drawRect(left,top,right,bottom,Paint); 以我原来的方式,top-bottom 为负数,画不出来,下图才是其中参数正...
  • qq_31138523
  • qq_31138523
  • 2016年11月05日 18:01
  • 1495

CALayer 与绘制 控件

一.前提 CALayers 首先要说的是CALayers 是屏幕上的一个具有可见内容的矩形区域,每个UIView都有一个根CALayer,其所有的绘制(视觉效果)都是在这个layer上进行的。UIVi...
  • ph101
  • ph101
  • 2015年01月04日 11:05
  • 166

IOS中CALayer的使用

IOS中CALayer的使用 分类: IOS开发 calayerquartzios开发动画 目录(?)在iOS中随处都可以看到绚丽的动画效果,...
  • a466468841
  • a466468841
  • 2015年08月17日 13:22
  • 433

Android 自定义View 画渐变色

这个是在自定义View时才用到。 主要设置paint,为paint设置一个Shader,定义填充色。 填充色主要参数: colors[] positions[] 即每个position定义一个colo...
  • iamshaofa
  • iamshaofa
  • 2013年12月26日 10:31
  • 6844
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用CALayer或者drawRect方法来绘制自定义View
举报原因:
原因补充:

(最多只允许输入30个字)