2016笔记——CGContextDrawRadialGradi
CGContextDrawRadialGradient这个辐射渐变函数之前没遇到过,现在好好解析一下:
![](https://img.haomeiwen.com/i711728/d07310360bb575a8.png)
第一个参数CGContextRef:相当于画笔
第二个参数CGGradientRef:渐变色值,由颜色空间、渐变色数组、位置数组共同构成。
第三个参数startCenter:外圈的中心圆点
第四个参数startRadius:外圈的半径
第五个参数endCenter:内圈的中心圆点
第六个参数endRadius:内圈的半径
第七个参数CGGradientDrawingOptions:渐变填充选项
为了测试这个函数,我写了一个测试Demo:
一个继承于UIView的MyView,MyView.m文件内容:
![](https://img.haomeiwen.com/i711728/5612e82da611df13.png)
![](https://img.haomeiwen.com/i711728/450b1354c2be7a4e.png)
![](https://img.haomeiwen.com/i711728/9c96d1ff5c514ea9.png)
我定义了三个颜色:红、绿、蓝,初始化时传入的size为(300,300)看看它们的辐射渐变都是什么样的。
效果一:
start:centerPoint end:centerPoint
startRadius:radius endRadius:50
options:kCGGradientDrawsBeforeStartLocation
![](https://img.haomeiwen.com/i711728/10d75c61764d7bdc.png)
效果二:
相对于一仅仅改变options为kCGGradientDrawsAfterEndLocation
![](https://img.haomeiwen.com/i711728/af56c0db1d98ce5a.png)
效果三:
start:centerPoint end:CGPointMake(centerPoint.x,self.frame.size.height)
startRadius:radius endRadius:radius-50
options:kCGGradientDrawsAfterEndLocation
(相对于效果二,内圈圆心的y增加了150,内圈的半径增加了50)
![](https://img.haomeiwen.com/i711728/5af1c16368360d8e.png)
效果四:
和效果三相比仅仅修改了options为KCGGradientDrawsBeforeStartLoaction。
![](https://img.haomeiwen.com/i711728/4cf1b9bce938365a.png)
这个有意思了,有点像手电筒了。为了看得明显点,调整一下半径继续测试。
效果五:
start:centerPoint end:CGPointMake(centerPoint.x,self.frame.size.height)
startRadius:radius-50 endRadius:radius-80
options:kCGGradientDrawsAfterEndLocation
![](https://img.haomeiwen.com/i711728/c323fcdcda2df17b.png)
此时能看出来这是一个立体的形状了吧?
如果还没看出来,好吧我再调一下尺寸进行测试。
效果六:
与效果五的唯一不同是:
startRadius:radius-100 endRadius:radius-50
![](https://img.haomeiwen.com/i711728/915156d84df3e00e.png)
这下能看出来是立体图了吧?看不出来我也没办法了。。
到这里我忽然有个想法,如果我外圈的半径小,内圈的半径大,那么从外圈投影向内圈的效果应该是由外向内依次显示:蓝、绿、红。测试搞一下.
效果七:
start:centerPoint end:centerPoint
startRadius:radius-100 endRadius:radius-50(外圈小,内圈大)
options:kCGGradientDrawsBeforeStartLocation
![](https://img.haomeiwen.com/i711728/a192797545296359.png)
效果八:
相对于效果七我们改一下options,KCGGradientDrawAfterEndLoaction。
先大胆猜一下:我们设置的option是辐射end后面的,也就是说起始于外圈,辐射向内圈,并且自内圈延伸辐射,那么就是内部黑色的圆,紧接着是红色,然后是绿色,接着是蓝色,向外部延伸就是无限大的蓝色的视图。
![](https://img.haomeiwen.com/i711728/a9bfa5270062c629.png)
总体实现效果如下:
外圈小,内圈大:
![](https://img.haomeiwen.com/i711728/93afa4e37ac544bb.png)
外圈大,内圈小:
![](https://img.haomeiwen.com/i711728/16c58ea636e29bec.png)
加油,小处也是知识点。