使用 UIBezierPath 进行简单的图形绘制
这篇文章介绍UIBezierPath的详细的使用, 以及一些细节!
创建一个XTBezierPath继承于UIView的类 使用drawRect 完成图形的绘制
在drawRect方法完成绘制 使用 moveToPoint
, addLineToPoint
两个方法绘制一个任意多边形 其中w, h 代表自定义View的宽, 高 代码如下:
// 初始化一个UIBezierPath对象.UIBezierPath *bPath = [UIBezierPath bezierPath];
// 线宽.bPath.lineWidth = 10;// 拐点处理.bPath.lineCapStyle = kCGLineCapRound;// 终点处理.bPath.lineJoinStyle = kCGLineCapRound;// 添加线上的点.[bPath moveToPoint:CGPointMake(w / 2, 0.0)];[bPath addLineToPoint:CGPointMake(w, h / 2)];[bPath addLineToPoint:CGPointMake(w / 2, h)];[bPath addLineToPoint:CGPointMake(0.0, h / 2)];[bPath closePath];// 填充内部颜色.// 绘制线.[bPath stroke];

绘制一个矩形, 直接使用bezierPathWithRect
这个方法
// 创建矩形.UIBezierPath *bPath = [UIBezierPath bezierPathWithRect:CGRectMake(30, 30, w - 60, h - 60)];bPath.lineWidth = 10;[bPath stroke];

绘制内切曲线, 直接使用这个方法bezierPathWithOvalInRect
// 这个方法, 是做一个内切曲线.// 圆形就是宽高相等.UIBezierPath *bPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(5, 5, w - 10, h - 100)];bPath.lineWidth = 10;[bPath stroke];

绘制一条弧线, bezierPathWithArcCenter
这个方法
UIBezierPath *bPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(150, 150) radius:130 startAngle:0 endAngle:M_PI_2 clockwise:YES];
bPath.lineWidth = 10;[bPath stroke];

绘制二次贝塞尔曲线,moveToPoint
, addQuadCurveToPoint
这两个搭配使用

// 二次贝塞尔曲线的支持.UIBezierPath *bPath = [UIBezierPath bezierPath];
// 开始的点.[bPath moveToPoint:CGPointMake(0, h)];// 终止点, 控制点.[bPath addQuadCurveToPoint:CGPointMake(w, h) controlPoint:CGPointMake(0, 0)];[bPath fill];

绘制三次贝塞尔曲线, moveToPoint
, addCurveToPoint

// 三次贝塞尔曲线UIBezierPath *bPath = [UIBezierPath bezierPath];
[bPath moveToPoint:CGPointMake(0, h / 2)];[bPath addCurveToPoint:CGPointMake(w, h / 2) controlPoint1:CGPointMake(w / 2, 0) controlPoint2:CGPointMake(w / 2, h)];bPath.lineWidth = 10;[bPath stroke];

UIBezierPath类只是CGPathRef数据类型和path绘图属性的一个封装, 我们可以用来直接修改底层的path, 通过CGMutablePathRef, 1. 完全的使用Core Graphics函数去修改path
#if 0CGMutablePathRef cgPath = CGPathCreateMutable();CGPathAddEllipseInRect(cgPath, NULL, CGRectMake(0, 0, 300, 300));CGPathAddEllipseInRect(cgPath, NULL, CGRectMake(50, 50, 200, 200));// Now create the UIBezierPath objectUIBezierPath* bPath = [UIBezierPath bezierPath];bPath.CGPath = cgPath;bPath.usesEvenOddFillRule = YES;bPath.lineWidth = 5;// After assigning it to the UIBezierPath object, you can release// your CGPathRef data type safely.[bPath stroke];CGPathRelease(cgPath);#endif
// 2.搭配使用 UIBezierPath类拥有自己底层的CGPathRef data type, 所以需要使用一个副本来修改, 之后再赋值
#if 1UIBezierPath *bPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 300, 300)];// Get the CGPathRef and create a mutable version.CGPathRef cgPath = bPath.CGPath;CGMutablePathRef mutablePath = CGPathCreateMutableCopy(cgPath);// Modify the path and assign it back to the UIBezierPath objectCGPathAddEllipseInRect(mutablePath, NULL, CGRectMake(50, 50, 200, 200));bPath.CGPath = mutablePath;// Release both the mutable copy of the path.bPath.lineWidth = 5;[[UIColor purpleColor] set];[bPath stroke];CGPathRelease(mutablePath);
#endif

绘制一个圆, 同时画一个边框
// Create an oval shape to draw.UIBezierPath *bPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 200, 200)];// Set the render colors[[UIColor lightGrayColor] setStroke];[[UIColor greenColor] setFill];CGContextRef aRef = UIGraphicsGetCurrentContext();// If you have content to draw after the shape,// save the current state before changing the transform//CGContextSaveGState(aRef);// Adjust the view's origin temporarily. The oval is// now drawn relative to the new origin point.CGContextTranslateCTM(aRef, 50, 50);// Adjust the drawing options as needed.bPath.lineWidth = 5;// Fill the path before stroking it so that the fill// color does not obscure the stroked line.[bPath fill];[bPath stroke];

总结 : UIBezierPath 使用这个就可以完成多种演示的图形了.
https://github.com/summerxx27/iOSUI
相关文章:

利用python实现IP扫描
需求:写一个脚本,判断192.168.11.0/24网络里,当前在线ip有哪些? 知识点: 1 使用subprocess模块,来调用系统命令,执行ping 192.168.11.xxx 命令 2 调用系统命令执行ping命令的时候,会有返回值…

EFQRCode:自动生成花式二维码
原文链接:https://github.com/EyreFree/EFQRCodeEFQRCode:自动生成花式二维码。# 为开源点赞# —— 由SwiftLanguage分享EFQRCode is a tool to generate QRCode UIImage or recognize QRCode from UIImage, in Swift. It is based on CIDetector and CI…

centos删除系统自带的httpd
centos删除系统自带的httpd 1、[rootlocalhost etc]# rpm -qa|grep httpd,查看与httpd相关软件包。 httpd-tools-2.2.15-15.el6.centos.i686 httpd-2.2.15-15.el6.centos.i686 www.2cto.com 2、然后删除httpd: [rootlocalhost etc]# rpm -e httpd 出现问…

[C#]ASP.NET MVC 3 在线学习资料
最近在研究如何把Twitter Bootstrap移植到ASP.NET MVC 3上,攒了点资料,先贴在之里,以后整理了写心得。 1. http://www.codeproject.com/Articles/404633/Transform-ASP-NET-MVC3-Default-Template-with-Twitt 这是一篇介绍如何把默认的ASP.NE…

域渗透提权之MS14-068
0x00 前言 在做渗透测试时,当遇到域环境,获取到一个域成员账号后,如果域控制器未打好补丁,则可以利用本文所提到的漏洞,快速获取到域控制器权限。笔者这里总结网上已有资料,加以描述,希望你能在…
iOS 高可控性日历基础组件 - SKCalendarView 的使用和实现思路的分享
阅读 61收藏 52017-04-02原文链接:http://www.jianshu.com/p/ce4c64a4d437SKCalendarView 是一个高可控性的日历基础组件,为了提高应用的自由度,默认只提供了日历部分的视图封装,但不涵盖切换月份按钮、年月分显示等非关键性控件&…

懒加载 字典转模型 自定义cell
1 懒加载: 1> 什么是懒加载? 懒加载又称为延时加载,即在系统调用的时候加载,如果系统不调用则不会加载.所谓的懒加载其实就是重写其 get 方法. 2> 特点:在使用懒加载的时候要先判断该方法是否已经存在,如果不存在则再进行实例化. 3> 优点: 不必将创建对象的方法都…

SQL GROUP BY 语句
合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句。 GROUP BY 语句 GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。 SQL GROUP BY 语法 SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator valu…

docker如何push镜像到docker hub个人的仓库
docker如何push镜像到docker hub个人的仓库 step1——找到本地镜像的ID:docker imagesstep2——登陆Hub:docker login --usernameusername --passwordpassword --emailemailstep3——tag:docker tag <imageID> <namespace>/<…

博客开通第一天,加油
博客开通第一天,加油转载于:https://www.cnblogs.com/tianyang01/p/5499881.html
【iOS 开发】iOS 10.3 如何更换 app 图标
2017-04-06 KyrieXu Cocoa开发者社区iOS 10.3 开放了更换 app 图标的 API,核心方法是下面这个: func setAlternateIconName(_ alternateIconName: String?, completionHandler: ((Error?) -> Void)? nil) 这是官方文档,但是你还需要在…

WordPress qTranslate插件跨站请求伪造漏洞
漏洞名称:WordPress qTranslate插件跨站请求伪造漏洞CNNVD编号:CNNVD-201306-058发布时间:2013-06-07更新时间:2013-06-07危害等级: 漏洞类型:跨站请求伪造威胁类型:远程CVE编号:CV…

ESXi6.5环境搭建(一:VMware Workstations 12 Pro 环境的安装及配置)
实验目的及要求 完成VMware workstations安装,会应用相关操作;完成虚拟机中ESXI6.5平台的安装及网络环境配置;完成VMware vSphere Client 6.0软件在PC端的安装及配置;完成使用浏览器或者VMware vSphere Client 6.0中对ESXI6.5的操…

[vs2008]Visual Studio 2008 SP1添加或删除功能提示查找SQLSysClrTypes.msi文件
前言 今天接到领导布置的一个任务,是之前同事负责的项目。离职了,现在客户有些地方需要修改,由于我之前参与过,就落在我的头上了。 然后我就把代码弄了过来,打开发现其中需要用到水晶报表。(我觉得不好用&a…

iOS10.3 的评论系统
作者 xuyafei86 关注 2017.03.30 12:39* 字数 428 阅读 265评论 4喜欢 11iOS10.3 对 App 的评论系统进行了较大的升级。主要在三个方面。 支持 App 内评分 在此之前我们要实现 App 内评分需要使用 SKStoreProductViewController。它只会在 App 内部模态打开在 AppStore 的详情页…

windows 内存泄露和资源泄漏调试
AQTime (有x64、win32的)进行内存泄露和资源泄漏监控http://wenku.baidu.com/view/9aa1c2afdd3383c4bb4cd2c1.html x64下载:http://downlite.net/lp.php?coc&nAutomatedQA.AQTime.v6.21.400.x64.Cracked.WORKING-BRD Windows Leaks Detector(好象只…

ESXi6.5环境搭建(二:ESXi 6.5环境的安装及配置)
实验目的及要求 完成VMware workstations安装,会应用相关操作;完成虚拟机中ESXI6.5平台的安装及网络环境配置;完成VMware vSphere Client 6.0软件在PC端的安装及配置;完成使用浏览器或者VMware vSphere Client 6.0中对ESXI6.5的操…

Android自定义ListView的Item无法响应OnItemClick的解决办法
转:如果你的自定义ListViewItem中有Button或者Checkable的子类控件的话,那么默认focus是交给了子控件,而ListView的Item能被选中的基础是它能获取Focus,也就是说我们可以通过将ListView中Item中包含的所有控件的focusable属性设置…

iPA 打包小工具
2017-04-07原文链接:http://icofans.com/2017/04/06/%E6%A1%8C%E9%9D%A2%E6%89%93%E5%8C%85IPA%E5%B0%8F%E7%A8%8B%E5%BA%8F/对项目进行 iPA 打包导出 使用方法:运行后,将项目文件夹拖拽至主界面,此时项目便开始打包。打包完成后会…

ESXi6.5环境搭建(三:vSphere Client6.0安装)
实验目的及要求 完成VMware workstations安装,会应用相关操作;完成虚拟机中ESXI6.5平台的安装及网络环境配置;完成VMware vSphere Client 6.0软件在PC端的安装及配置;完成使用浏览器或者VMware vSphere Client 6.0中对ESXI6.5的操…

JavaScript arguments对象
1、在JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性。arguments非常类似Array,但实际上又不是一个Array实例。可以通过如下代码得以证实(当然,实际上,在函数funcArg中&a…

iOS开发之 - 好玩的富文本
周末闲着没事,就想着不如把那些容易遗忘的知识点整理一下,一来可以让有需要的朋友少走弯路,二来自己以后再忘记的时候也可以回头看看......但 iOS 中小冷易忘的知识点实在太多了,不知道该从哪里开始整理,“百无聊赖”逛…

sharepoint自带JS函数获取URL参数
GetUrlKeyValue 转载于:https://www.cnblogs.com/bmib/p/3139749.html

ESXi6.5环境搭建(四:虚拟机操作系统安装及配置)
实验目的及要求 完成VMware workstations安装,会应用相关操作;完成虚拟机中ESXI6.5平台的安装及网络环境配置;完成VMware vSphere Client 6.0软件在PC端的安装及配置;完成使用浏览器或者VMware vSphere Client 6.0中对ESXI6.5的操…
iOS 生成带 logo 的二维码,区域截屏保存至相册(小功能二连发 (一))
原文链接:http://www.jianshu.com/p/36e9f012ef39生成带 logo 的二维码 区域截屏相关 —— 由3033分享开篇 最近项目需要搞了几个相对独立的小功能,今天有空总结一下他们的实现思路和方法,并总结一点项目中帮同事解决的问题,在此立…

JavaScript-学习一全局变量
因为局部变量只作用于函数内,所以不同的函数可以使用相同名称的变量。 局部变量在函数开始执行时创建,函数执行完后局部变量会自动销 不限制位置的 JavaScript 变量生命周期在它声明时初始化。 局部变量在函数执行完毕后销毁。 全局变量在页面关闭后销毁…

Android 4.2真坑爹
艹~~~,Android4.2真坑爹,4.1以前的方法都不能使用了。 操蛋呢。。。转载于:https://www.cnblogs.com/liushuibufu/p/3253611.html

ESXi6.5环境搭建(五:常见问题及解决方案实验总结)
实验目的及要求 完成VMware workstations安装,会应用相关操作;完成虚拟机中ESXI6.5平台的安装及网络环境配置;完成VMware vSphere Client 6.0软件在PC端的安装及配置;完成使用浏览器或者VMware vSphere Client 6.0中对ESXI6.5的操…

《Linux4.0设备驱动开发详解》笔记--第十二章:Linux设备驱动的软件架构思想
待补充转载于:https://www.cnblogs.com/zcjboke/p/5513130.html

iOS_Development~ 添加 / 隐藏 UITabBar 右上角的小红点
原文链接:http://www.jianshu.com/p/de72118a49ad添加 / 隐藏 UITabBar 右上角的小红点 —— 由anticipate_91分享添加/隐藏UITabBar右上角的小红点 话不多说,直接上代码吧! 1.添加tabBar的小红点 /** 添加tabBar的小红点* index࿱…