quartz2D既可以绘制原始图形,也可以给原始图形绘制阴影。

绘制阴影时,需要的一些参数:上下文、阴影偏移量、阴影模糊系数

注意:在drawRect:方法中同时调用绘制同一个图形时,在对绘制的图形做绘制阴影处理前,需要先对上下文进行保存,绘制阴影成功后,还要对上下文进行复位,还原为最原始的上下文。目的是为了不影响后面的绘图操作。

举例的阴影绘制实例如下:

1、自定义一个视图类DemoView,并将控制器的视图关联该自定义类,同时在该定义类中重写- (void)drawRect:(CGRect)rect,将绘制无阴影图形和绘制阴影图形的调用方法写在里面。

    

//绘制无阴影图形和绘制阴影图形的调用方法

- (void)drawRect:(CGRect)rect
{
//画图形
//1.获取绘图的上下文
CGContextRef context = UIGraphicsGetCurrentContext(); //画带阴影的矩形
[self drawRectWithShadow:context]; //画不带阴影的矩形
[self drawRectWithNoShadow:context]; }

2、具体的绘制代码如下:

// 绘制无阴影的矩形

#pragma mark -画不带阴影的矩形

-(void)drawRectWithNoShadow:(CGContextRef)context
{
//3.添加矩形
CGContextAddRect(context, CGRectMake(, , , )); //4.设置绘图属性
[[UIColor redColor]setFill]; //填充色
[[UIColor blackColor]setStroke]; //描边 //5.画矩形
CGContextDrawPath(context, kCGPathEOFillStroke);
}

绘制的无阴影矩形截图为:

// 绘制带阴影的矩形

#pragma mark -画带阴影的矩形(阴影分为:无颜色(默认的)、有颜色的(设置颜色))

-(void)drawRectWithShadow:(CGContextRef)context
{
//保存旧的绘图上下文
CGContextSaveGState(context); //2.设置阴影(参数:上下文、阴影偏移量、阴影模糊系数)
//不带颜色的阴影
//CGContextSetShadow(context, CGSizeMake(10, 10), 10.0); //带颜色的阴影
CGContextSetShadowWithColor(context, CGSizeMake(, ), 10.0,[[UIColor purpleColor]CGColor]); //3.添加矩形
CGContextAddRect(context, CGRectMake(, , , )); //4.设置绘图属性
[[UIColor redColor]setFill]; //填充色
[[UIColor blackColor]setStroke]; //描边 //5.画矩形
CGContextDrawPath(context, kCGPathEOFillStroke); //恢复旧的绘图上下文
CGContextRestoreGState(context);
}

绘制的无颜色的阴影图形和有颜色的阴影图形截图为:

      

iOS:quartz2D绘图(给图形绘制阴影)的更多相关文章

  1. HTML5 给图形绘制阴影(绘制五角星示例)

    几个属性 shadowOffsetX:阴影的横向位移量. shadowOffsetY:阴影的纵向位移量. shadowColor:阴影的颜色. shadowBlur:阴影的模糊范围. 属性说明 sha ...

  2. Canvas 给图形绘制阴影

    /** * 图形绘制阴影 */ function initDemo6() { var canvas = document.getElementById("demo6"); if ( ...

  3. Matlab绘图基础——图形绘制的插值  以及 图像大小的重采样

    使用说明:图形绘制时的插值 interp1   %1-D data interpolation interpft  %使用fft算法插值     %将原数据x转换到频率域,再逆转换回来更密集的数据采样 ...

  4. iOS:quartz2D绘图(显示绘制在PDF上的图片)

    quart2D既可以用来绘制图像到pdf上,也可以从pdf上读取图像并显示出来.在使用这种方式之前,还有一种方式可以用来读取显示pdf上的图像,即使用UIWebView网页视图控件- (void)lo ...

  5. iOS:quartz2D绘图 (动画)

    quartz2D可以用来绘制自己需要的图形,它们绘制出来的是一个静态的图形,那么如何绘制一个动态的图形呢?动态的图形就是动画,所谓动画,其实就是很多张图片在短时间内不停的切换所产生的一种视觉效果.qu ...

  6. Matlab绘图基础——图形绘制的插值

    interp1   %1-D data interpolation interpft  %使用fft算法插值     %将原数据x转换到频率域,再逆转换回来更密集的数据采样点 spline    %一 ...

  7. [html] 学习笔记-Canvas图形绘制处理

    使用Canvas API 可以将一个图形重叠绘制在另外一个图形上,也可以给图形添加阴影效果. 1.Canvas 图形组合 通过 globalCompositeOperation = 属性 来指定重叠效 ...

  8. iOS:quartz2D绘图(处理图像,绘制图像并添加水印)

    绘制图像既可以重写drawRect:方法并在该方法中绘制,也可以不用重写该方法,它有封装好的函数获取自己的图像绘制上下文,即UIGraphicsBeginImageContext(CGSize siz ...

  9. iOS学习——Quartz2D学习之UIKit绘制

    iOS学习——Quartz2D学习之UIKit绘制 1.总述 在IOS中绘图技术主要包括:UIKit.Quartz 2D.Core Animation和OpenGL ES.其中Core Animati ...

随机推荐

  1. django “如何”系列7:错误汇报

    当你正在运行一个公共的站点的时候,你应该关掉DEBUG设置.这将使你的服务器运行的更快,同时也能预防别有用心的用户从你的错误页面看到你应用的一些详细配置信息.然而,当debug为false的时候,你将 ...

  2. LeetCode解题报告—— Sum Root to Leaf Numbers & Surrounded Regions & Single Number II

    1. Sum Root to Leaf Numbers Given a binary tree containing digits from 0-9 only, each root-to-leaf p ...

  3. AC日记——国王游戏 洛谷 P1080

    国王游戏 思路: 贪心+高精: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 1005 struct Dat ...

  4. electron-builder中NSIS相关配置

    electron-builder中NSIS相关配置 相比较于electron-packager打包,使用electron-builder打包使得包体积更小.在electron-builder中,对于N ...

  5. 在Pygtk和Glade使用Gtkbuilder

    最近开始学习python的GUI,选择了Pygtk,试着用Glade设计界面,项目文件采用Gtkbuilder格式,网上的教程大部分是使用Libglade,所以用xml方式读取.glade文件: wT ...

  6. ajaxReturn 之前dump调试,导致$.ajax不能正常运行

    ajaxReturn 之前dump调试,导致$.ajax不能正常运行 以后调试的时候,注意下这个情况

  7. hihoCoder #1831 : 80 Days-RMQ (ACM/ICPC 2018亚洲区预选赛北京赛站网络赛)

    水道题目,比赛时线段树写挫了,忘了RMQ这个东西了(捞) #1831 : 80 Days 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 80 Days is an int ...

  8. SSH整合错误三连

    访问Action错误 ognl.MethodFailedException: Method "add" failed for object com.test3.action.Use ...

  9. js跨域请求实现

    js代码 var url = zfba2url + "/fzyw/xzfy/smcl/autoUpdateByWS.action"; var data = { "writ ...

  10. java Integer parseInt()

    先来一段代码,代码很简单的,如下: public static void main(String[] args) { Integer a = Integer.parseInt("3" ...