2016笔记——CGContextDrawRadialGradi
CGContextDrawRadialGradient这个辐射渐变函数之前没遇到过,现在好好解析一下:

第一个参数CGContextRef:相当于画笔
第二个参数CGGradientRef:渐变色值,由颜色空间、渐变色数组、位置数组共同构成。
第三个参数startCenter:外圈的中心圆点
第四个参数startRadius:外圈的半径
第五个参数endCenter:内圈的中心圆点
第六个参数endRadius:内圈的半径
第七个参数CGGradientDrawingOptions:渐变填充选项
为了测试这个函数,我写了一个测试Demo:
一个继承于UIView的MyView,MyView.m文件内容:



我定义了三个颜色:红、绿、蓝,初始化时传入的size为(300,300)看看它们的辐射渐变都是什么样的。
效果一:
start:centerPoint end:centerPoint
startRadius:radius endRadius:50
options:kCGGradientDrawsBeforeStartLocation

效果二:
相对于一仅仅改变options为kCGGradientDrawsAfterEndLocation

效果三:
start:centerPoint end:CGPointMake(centerPoint.x,self.frame.size.height)
startRadius:radius endRadius:radius-50
options:kCGGradientDrawsAfterEndLocation
(相对于效果二,内圈圆心的y增加了150,内圈的半径增加了50)

效果四:
和效果三相比仅仅修改了options为KCGGradientDrawsBeforeStartLoaction。

这个有意思了,有点像手电筒了。为了看得明显点,调整一下半径继续测试。
效果五:
start:centerPoint end:CGPointMake(centerPoint.x,self.frame.size.height)
startRadius:radius-50 endRadius:radius-80
options:kCGGradientDrawsAfterEndLocation

此时能看出来这是一个立体的形状了吧?
如果还没看出来,好吧我再调一下尺寸进行测试。
效果六:
与效果五的唯一不同是:
startRadius:radius-100 endRadius:radius-50

这下能看出来是立体图了吧?看不出来我也没办法了。。
到这里我忽然有个想法,如果我外圈的半径小,内圈的半径大,那么从外圈投影向内圈的效果应该是由外向内依次显示:蓝、绿、红。测试搞一下.
效果七:
start:centerPoint end:centerPoint
startRadius:radius-100 endRadius:radius-50(外圈小,内圈大)
options:kCGGradientDrawsBeforeStartLocation

效果八:
相对于效果七我们改一下options,KCGGradientDrawAfterEndLoaction。
先大胆猜一下:我们设置的option是辐射end后面的,也就是说起始于外圈,辐射向内圈,并且自内圈延伸辐射,那么就是内部黑色的圆,紧接着是红色,然后是绿色,接着是蓝色,向外部延伸就是无限大的蓝色的视图。

总体实现效果如下:
外圈小,内圈大:

外圈大,内圈小:

加油,小处也是知识点。