UIBezierPath画圆弧的方法

- (void)addArcWithCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise NS_AVAILABLE_IOS(4_0);

方法中各参数的意义:

  • center 圆心的坐标
  • radius 圆的半径
  • startAngle 起始的弧度
  • endAngle:结束的弧度
  • clockwise:YES为顺时针,No为逆时针

以上五个参数,除了startAngleendAngle会不清楚怎么设置,其他都比较容易理解,下面我们针对这两个参数做一些讲解,如果有其他三个参数不太清楚的,可以联系我,不过应该没有吧,= =

如何设置startAngle、endAngle

1.startAngleendAngle是弧度,不是角度(知道的直接跳到2)

iOS提供以下几种表示方式:

// 一个半圆的弧度,即180°
#define M_PI        3.14159265358979323846264338327950288   /* pi             */
// 90°
#define M_PI_2      1.57079632679489661923132169163975144   /* pi/2           */
// 45°
#define M_PI_4      0.785398163397448309615660845819875721  /* pi/4           */

用上面提供的宏表示任何度数绰绰有余,比如表示135°:
0.75 * M_PI
或者1.5 * M_PI_2
....

2.弧度的起点,仅针对这个API

3.弧度的表示

从0°的点开始顺时针数算是正方向的角度,用正数表示
从0°的点开始逆时针数算是反方向的角度,用负数表示
所以,在圆上的一个角度,可以同时有两种表示方法,顺时针方向数一种,逆时针方向数一种,讲到这里先别慌,我们现在只要知道怎么在圆上表示一个弧度就行。

不管怎么表示,我们只要知道这个弧度在圆的什么位置上

4.如何设置startAngleendAngle

举个栗子,我现在要用UIBezierPath画一个如下图所示的图形:

要绘制的图形

分析步骤如下:
4.1 确定centerradius
4.2 确定弧度的起点、弧度的终点

弧度的起点、终点

4.3 用弧度表示弧度的起点、弧度的终点
即用startAngleendAngle表示弧度的起点、弧度的终点
弧度的起点 - startAngle: 0.25 * M_PI 或 -1.75 * M_PI
弧度的终点 - endAngle: 0.5 * M_PI 或 -1.5 * M_PI

4.4 确定clockwise,这一步是决定你的弧长怎么样的关键
如果设为YES,圆弧会从弧度的起点沿着顺时针方向画弧,遇到弧度的终点停止,结果如下:

顺时针

如果设为NO,圆弧会从弧度的起点沿着逆时针方向画弧,遇到弧度的终点停止,结果如下:

逆时针

所以startAngleendAngle只是表示出起点和终点,至于线会怎么画,决定于clockwise

下面附上源码:

    CGPoint line_start = CGPointMake(0, 30);CGPoint line_end = CGPointMake(100, 30);CGPoint circle_center = CGPointMake(85, 15);UIBezierPath *path = [UIBezierPath bezierPath];[path moveToPoint:line_start];[path addLineToPoint:line_end];// 注意线画到这里其实只画了一条直线,但是调用addArcWithCenter方法路径会自动连线到圆弧的起点[path addArcWithCenter:circle_center radius:10 startAngle:0.25 * M_PI endAngle:- 1.5 * M_PI clockwise:NO];CAShapeLayer *shapeLayer=[CAShapeLayer layer];shapeLayer.path = path.CGPath;shapeLayer.fillColor = [UIColor clearColor].CGColor;//填充颜色shapeLayer.strokeColor = [UIColor blackColor].CGColor;//边框颜色shapeLayer.lineCap = @"round";[self.layer addSublayer:shapeLayer];

效果如下:

IMG_3129.PNG

总结

<p>

花了一上午才写完,不知道写的清不清楚,希望对你能有帮助,另外记得顺手点赞~

致谢

http://www.bubuko.com/infodetail-1031393.html

作者:才寒
链接:https://www.jianshu.com/p/5e96e754d9cb
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

深入理解UIBezierPath画圆弧addArcWithCenter相关推荐

  1. UIBezierPath画圆弧的记录

    UIBezierPath通过 - (void)addArcWithCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)s ...

  2. iOS - 利用 UIBezierPath 绘制圆弧

    前言 最近要写个「会话气泡」,由于没有找到合适的背景图片,所以需要直接用 UIBezierPath 进行绘制.期间用到之前还不太熟悉的绘制圆弧相关知识,于是写下此文进行记录. API 浅析 UIBez ...

  3. html 物理引擎,在物理引擎中画圆弧

    本文作者:IMWeb zzbozheng 未经同意,禁止转载 因为需求的需要,要使用在物理引擎中使用四分之一圆弧,我们来看看怎么实现在物理引擎中画出四分之一的圆弧, 在物理引擎中绘制圆弧 一般来说,物 ...

  4. 圆弧的函数c语言,VC++中Arc函数画圆弧

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:VC++中Arc函数画圆弧回答:BOOL Arc(int x1,int y1,int x2,int y2,int x3,int y3 ...

  5. Android canvas.drawArc() 画圆弧

    public void drawArc(@NonNull RectF oval, float startAngle, float sweepAngle, boolean useCenter,@NonN ...

  6. android 画圆弧动画,『Android自定义View实战』自定义带入场动画的弧形百分比进度条...

    写在前面 这是在简书发表的处女座,这个想法也停留在脑海中很久了,一直拖到现在(懒癌发作2333),先自我介绍一番,一枚刚毕业不久的Android程序猿,初出茅庐的Android小生,之前一直在CSDN ...

  7. java 画弧线,利用Android画圆弧canvas.drawArc()实例详解

    前言 在学习android中图形图像处理技术这部分内容时,对绘制圆弧函数canvas.drawArc()的用法.参数含义及画图原理很是不理解,在网上搜索了一些,加上自己的理解,在此做个小总结,下面来一 ...

  8. Android 画圆弧canvas.drawArc() 详解

    public void drawArc(@NonNull RectF oval, float startAngle, float sweepAngle, boolean useCenter,@NonN ...

  9. matlab画指定角度圆弧,CAD中如何根据指定的角度画圆弧

    在用CAD绘图的过程中,我们有时候需要根据一个指定的角度画出相应的圆弧,那么怎么操作呢? 下面跟着小编一起来学习吧 方法一: 1.首先,大家打开中望CAD软件 2.利用软件绘图功能的画"圆& ...

最新文章

  1. 如何写好数据分析师简历
  2. 商务智能 “软肋”何在?
  3. Android开源项目发布jCenter
  4. GAE Python 2009-3-22
  5. 将文件中的参数读取成Map
  6. Dynamics CRM 2016 安装
  7. 笔记本计算机无法开机怎么办,笔记本开机没反应,教您笔记本电脑开不了机怎么处理...
  8. 【LeetCode笔记】213. 打家劫舍II(Java、动态规划)
  9. java方法的重载与覆盖的返回值类型
  10. 人脸对齐(十三)--3DDFA
  11. sinx/x在0到+∞的积分
  12. 【算法与数据结构】—— 并查集
  13. 手机android微信文件怎么恢复,微信文件过期或被清理怎么恢复?好工具,帮你安全快速找回文件!...
  14. 医院预约挂号系统的设计
  15. 微软的苹果香味——专访微软MacBU组成员
  16. 一款小程序软件开发报价包含哪些费用呢?
  17. 史上最全的15个苹果手机输入法使用技巧,不看后悔三年
  18. setcontext
  19. 远景论坛找不到服务器,远景论坛 PCBeta 无法访问的临时解决办法
  20. 面向接口编程的个人理解

热门文章

  1. Arduino 红外模块 红外接收 红外发射
  2. 豆瓣电视剧评论的爬取以及进行情感分析+生成词云
  3. 使用kubeadm部署一个K8s集群
  4. Python同步异步爬虫通过代理访问HTTPS
  5. T5工程移植到 T5L 屏的步骤
  6. PMV泵控制比例溢流阀控制器
  7. 红外摄像机的原理及选择
  8. 软件测试XX系统功能需求说明书(模板)
  9. linux终端c需要输入法,LINUX下怎么设置默认输入法?
  10. 软件BUG造成本次动车追尾,警方已经拘留了两名 无证 程序员