iOS程序猿之UIBezierPath类属性和方法(画图路径)

iOS计算UIBezierPath交集(绘制UIBezierPath交集) 安卓中,系统提供Path.op,计算两个Path的交集。然而,iOS的UIBezierPath并没有类似的API。 阅读详情

UIBezierPath

UIBezierPath类可以定义一个由直线和曲线线段的路径,呈现在自定义视图上.可以定义简单的形状,如矩形,椭圆形,圆弧或者复杂多边形等.定义形状后,就可以使用这个类的其他方法来呈现当前当前绘制上下文的路径.

创建UIBezierPath对象

/**
 *  创建并返回一个UIBezierPath对象。
 *
 *  @return 一个新的空路径对象。
 */
+ (instancetype)bezierPath;
/**
 *  创建并返回一个用矩形路径初始化的UIBezierPath对象。
 *
 *  @param rect 矩形路径
 *
 *  @return 与矩形路径的新路径对象
 */
+ (instancetype)bezierPathWithRect:(CGRect)rect;
/**
 *  创建并返回一个在指定的矩形内切一个椭圆形的路径初始化的UIBezierPath对象
 *
 *  @param rect 矩形,会内切一个椭圆
 *
 *  @return 与椭圆形路径一致的新路径对象。
 */
+ (instancetype)bezierPathWithOvalInRect:(CGRect)rect;
/**
 *  创建并返回一个采用了圆角矩形路径初始化的UIBezierPath对象。
 *
 *  @param rect         矩形路径
 *  @param cornerRadius 圆角半径
 *
 *  @return 与圆角矩形路径一致的对象。
 */
+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect cornerRadius:(CGFloat)cornerRadius;
/**
 *  创建并返回一个采用了圆角矩形路径初始化的UIBezierPath采用了圆角矩形路径初始化的对象。(圆角位置可选)
 *
 *  @param rect        矩形路径
 *  @param corners     圆角的角标(顺时针方向), 取值参考下面的UIRectCorner
 *  @param cornerRadii 圆角半径
 *
 *  @return 与圆角矩形路径一致的对象。
 */
+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect byRoundingCorners:(UIRectCorner)corners cornerRadii:(CGSize)cornerRadii;
/**
 *  enum UIRectCorner {
 *  UIRectCornerTopLeft      =  1  <<  0 , // 矩形左上角
 *  UIRectCornerTopRight     =  1  <<  1 , // 矩形的右上角
 *  UIRectCornerBottomLeft   =  1  <<  2 , // 矩形的左下角
 *  UIRectCornerBottomRight  =  1  <<  3 , // 矩形的右下角
 *  UIRectCornerAllCorners   =  ~ 0 // 矩形的各个角
 *  };
 */
/**
 *  创建并返回一个带有圆弧初始化的UIBezierPath对象。
 *
 *  @param center     指定圆的中心点(在当前坐标中)用于定义弧
 *  @param radius     指定用于定义圆弧的圆的半径
 *  @param startAngle 指定弧的起始角(以弧度测量)
 *  @param endAngle   指定圆弧的结束角(以弧度测量)
 *  @param clockwise  绘制圆弧的方向 (YES表示顺时针)
 *
 *  @return 与指定弧路径一致的对象
 */
+ (instancetype)bezierPathWithArcCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise;
/**
 *  创建并返回一个指定路径信息的UIBezierPath对象
 *
 *  @param CGPath 路径
 *
 *  @return 与指定路径一致的对象
 */
+ (instancetype)bezierPathWithCGPath:(CGPathRef)CGPath;
/**
 *  创建并返回一个相反方向具有相同路径形状的对象
 *
 *  @return 在相反方向具有相同路径的形状的新路径的对象
 */
- (UIBezierPath *)bezierPathByReversingPath;

构建路径

/**
 *  第一个点的位置
 *
 *  @param point 起始点的坐标
 */
- (void)moveToPoint:(CGPoint)point;
/**
 *  添加直线的路径
 *
 *  @param point 线段的终点坐标
 */
- (void)addLineToPoint:(CGPoint)point;
/**
 *  添加圆弧路径
 *
 *  @param center     圆弧的圆点坐标
 *  @param radius     圆弧半径
 *  @param startAngle 圆弧起始角
 *  @param endAngle   圆弧结束角
 *  @param clockwise  绘制方向(YES顺时针)
 */
- (void)addArcWithCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise;
/**
 *  添加一个三次贝塞尔曲线路径
 *
 *  @param endPoint      曲线的终点坐标
 *  @param controlPoint1 第一个控制点
 *  @param controlPoint2 第二个控制点
 */
- (void)addCurveToPoint:(CGPoint)endPoint controlPoint1:(CGPoint)controlPoint1 controlPoint2:(CGPoint)controlPoint2;
/**
 *  添加一个二次贝塞尔曲线路径
 *
 *  @param endPoint     曲线的终点坐标
 *  @param controlPoint 控制点坐标
 */
- (void)addQuadCurveToPoint:(CGPoint)endPoint controlPoint:(CGPoint)controlPoint;
/**
 *  关闭路径
 */
- (void)closePath;

/**
 *  移除所有的子路径
 */
- (void)removeAllPoints;

/**
 *  将bezierPath和当前对象添加到一起???
 *
 *  @param bezierPath 待添加的路径
 */
- (void)appendPath:(UIBezierPath *)bezierPath;
/**
 *  设置路径线路的图案
 *
 *  @param pattern 线段和间隙的长度???
 *  @param count   图案的值???
 *  @param phase   在该偏移开始绘制图案,在沿虚线图案点测量???
 */
- (void)setLineDash:(const CGFloat *)pattern count:(NSInteger)count phase:(CGFloat)phase;
/**
 *  获取路径线路的图案
 *
 *  @param pattern   线段和间隙的长度???
 *  @param count   图案的值???
 *  @param phase   在该偏移开始绘制图案,在沿虚线图案点测量???
 */
- (void)getLineDash:(CGFloat *)pattern count:(NSInteger *)count phase:(CGFloat *)phase;

绘制路径

/**
 *  填充当前路径包围的区域
 */
- (void)fill;
/**
 *  用指定的混合模式和透明度来填充路径包围的区域
 *
 *  @param blendMode 混合模式,枚举值
 *  @param alpha     透明度
 */
- (void)fillWithBlendMode:(CGBlendMode)blendMode alpha:(CGFloat)alpha;
/**
 *  按路径画线
 */
- (void)stroke;
/**
 *  按指定的混合模式和透明度进行画线
 *
 *  @param blendMode 混合模式,枚举值
 *  @param alpha     透明度
 */
- (void)strokeWithBlendMode:(CGBlendMode)blendMode alpha:(CGFloat)alpha;
/**
 *  此方法会修改当前图形上下文的可见绘图区域。调用它之后,后续绘制操作导致呈现的内容,只有当他们出现指定路径的填充区域内。
 *  如果您需要删除裁剪区域执行后续的绘制操作,必须保存当前图形状态(使用CGContextSaveGState调用此方法之前功能)。当你不再需要剪切区域,则可以恢复以前的绘图性能和使用剪切区域CGContextRestoreGState功能
 */
- (void)addClip;

检测点

/**
 *  路径包围的面积是否包含指定点
 *
 *  @param point 用来测试路径的点
 *
 *  @return YES:该点在路径包围的面积内,NO:则不在
 */
- (BOOL)containsPoint:(CGPoint)point;

变换

/**
 *  使用仿射变换矩阵的路径转换的路径
 *
 *  @param transform 仿射变换矩阵应用到的路径
 */
- (void)applyTransform:(CGAffineTransform)transform;

相关属性

@property (nonatomic) CGPathRef CGPath;
@property (nonatomic,readonly) CGPoint currentPoint;// 在图形路径中的当前点,如果当前路径为空,则此属性为CGPointZero
@property (nonatomic) CGFloat lineWidth; // 路径的线宽,默认1.0;
@property (nonatomic) CGLineCap lineCapStyle; // 端点样式,默认kCGLineCapButt
/**
 *  enum CGLineCap {
 *      kCGLineCapButt,
 *      kCGLineCapRound,
 *      kCGLineCapSquare
 *  };
 */
@property (nonatomic) CGLineJoin lineJoinStyle; // 线条链接样式,默认kCGLineJoinMiter
/**
 *  enum CGLineJoin {
 *      kCGLineJoinMiter, //尖的,斜接
 *      kCGLineJoinRound, //圆
 *      kCGLineJoinBevel //斜面
 *  }
 */
@property (nonatomic) CGFloat miterLimit; // 尖角限制值
@property (nonatomic) CGFloat flatness; // 曲线平坦度,默认0.6;值越小,曲线越平滑,但需要更多的计算时间。值越大,会导致更多的锯齿状曲线,但呈现的速度要快得多。
@property (nonatomic) BOOL usesEvenOddFillRule; // 是否使用奇偶缠绕规则填补路径,默认是NO; YES,路径是使用奇偶规则填补。NO,它使用的是非零规则填补。
/**
 *  对于奇偶规则,如果路径交叉的总数为奇数,则点被认为是在路径内与相应的区域被填充。如果横跨的数目是偶数,则点被认为是所述路径之外和该区域不填充。
 *  为非零规则,左到右路径的交叉计数为+1和右至左路径的交叉计数为-1。如果该交叉的总和不为零,该点被认为是在路径内与相应的区域被填充。如果该和为0,则点是路径外面和该区域不填充。
 */
@property (readonly,getter=isEmpty) BOOL empty;//路径是否有任何有效的元素(只读);有效的路径元素包括命令来移动到指定的点,画一条直线或曲线段或闭合路径
@property (nonatomic,readonly) CGRect bounds; // 路径的边框(只读);此属性的值表示完全封闭路径中的所有点,包括贝塞尔和二次曲线的控制点的最小矩形。











精通UIBezierPath:iOS图形绘制技术指南 在UIBezierPath中,基本的路径元素包括线条(line)、矩形(rect)和椭圆(oval)。它们是构建更复杂路径的基石。// 示例代码:绘制基本路径元素// 绘制线条// 绘制矩形// 绘制椭圆// 其他属性设置...在上述代码中,我们使用了move(to:)方法和方法来定义一个线条,使用rect构造器定义一个矩形路径,以及方法定义一个椭圆路径。每种路径都有其特定的构造方法,理解并掌握它们对于UI设计至关重要。在实际的项目中,你可能需要绘制更复杂的自定义视图。 阅读详情

相关推荐

快速上手IOS UIBezierPath(贝塞尔曲线)

UIBezierPath主要用来绘制矢量图形,它是基于Core Graphics对CGPathRef数据类型和path绘图属性的一个封装,所以是需要图形上下文的(CGContextRef),所以一般UIBezierPath在drawRect中使用。 使用方法 UIBezierPath 是对 CGPathRef 的封装。创建矢量图形时,拆解成一或多条线段,拼接起来,每条线段的终点都是下一条线段的起点。 具体地: 1.创建一个 UIBezierPath 对象 2.用 moveToPoint: 设置初始线段的起点 3.添加线段,定义一或多个子路径 4.修改 UIBezierPath 的绘图相关的属性

UIBezierPath使用

UIBezierPath使用 贝塞尔曲线作用 贝塞尔曲线路径可用来绘制自定义路径,圆,弧度,矩形,单独圆角矩形等 UIBerzierPath类介绍 初始化方法 /// MARK: - 初始化方法【常规路径】 /// 矩形 public convenience init(rect: CGRect) /// 椭圆 形状依赖于矩形(比如当矩形为正方形的时候为圆...

小桥流水哗啦啦,iOS Coder 哒哒哒 1158

第1关:STL模板之queue实例一:最少个数

头歌自创答案

xiyunSacire的博客 817

iOS绘画之UIBezierPath

UIBezierPath用于定义一个由直线/曲线组合而成的路径, 并且可以在自定义视图中渲染该路径. 在使用的过程中, 我们只需要先指定好路径的结构, 比如一条直线、一条贝塞尔曲线、一个矩形、一个椭圆、一个圆弧等, 然后使用系统为我们提供的方法将构建好的路径渲染出来即可

蚊香酱的专栏 735

告别ORB-SLAM2?手把手教你用OpenVSLAM在Ubuntu 20.04上跑通第一个SLAM Demo(含依赖库避坑指南)

本文详细介绍了如何在Ubuntu 20.04系统上从ORB-SLAM2迁移到OpenVSLAM,包括环境配置、依赖库安装、编译调整及性能优化。OpenVSLAM凭借其模块化设计和多相机支持,在SLAM领域展现出显著优势,适合机器人导航和AR应用开发。文章还提供了实用的避坑指南和进阶技巧,帮助开发者高效完成迁移。

weixin_42524499的博客 254

H3C交换机Console口连接全攻略:从接线到PuTTY配置(附常见问题排查)

本文详细介绍了H3C交换机Console口的连接与配置方法,包括硬件线缆选择、驱动安装、PuTTY参数设置及常见问题排查。特别针对Console转USB线缆的兼容性和驱动安装难点提供实用建议,帮助网络工程师快速掌握串联调试技巧,解决连接中的黑屏、乱码等典型问题。

weixin_42549451的博客 674

UIBezierPath详解

使用UIBezierPath类可以创建基于矢量的路径,这个类在UIKit中。此类是Core Graphics框架关于path的一个封装。使用此类可以定义简单的形状,如椭圆或者矩形,或者有多个直线和曲线段组成的形状。      1.Bezier Path 基础    UIBezierPath对象是CGPathRef数据类型的封装。path如果是基于矢量形状的,都用直线和曲线段去创建

逢个场,作个戏 1602

fins协议握手信号服务器响应,欧姆龙FinsTCP与FinsUDP协议解析 —— 利用Wireshark对报文逐字节进行解析详细解析附含报文模拟器等...

前言 – Fins欧姆龙这个协议网上极少有相关的模拟器、Tcp的这一块倒是有但是Udp的基本都是不可用1、 Fins协议结构也很简单 协议分为两种 一种tcp一种udp2、 Tcp比Udp的报文会多一层tcp的head头部3、 Udp回应报文在Wireshark中是解析不到(因为他按照UDP的格式去解那指定是解不到)好长时间没有更新过博客了、也比较懒= = 。一、Read(TCP)发包那么这个就很...

weixin_32491317的博客 4437

iOS 谁说程序猿不懂浪漫之 爱心

近来无事,想想IT该怎样才能彰显浪漫情怀,不能口头上说说而已,最关键的是要有可视化的东西展示出来才行~ 废话不多说,直接上Demo HeartView.h 1 // 2 // HeartView.h 3 // DrawHeart 4 // 5 // Created by WQL on 16/3/1. 6 // Copyright © 2016年 WQL...

weixin_30615767的博客 142

EMB电子机械制动系统和EHB电子液压制动系统控制功能的对比

EMB电子机械制动系统相比EHB液压制动系统具有显著优势:响应速度更快(<100ms)、控制精度更高(±2N·m)、能实现单轮独立控制,支持0.1%级制动力调节。在ABS、ESC等安全功能上表现更优,制动平顺性和NVH性能更好,同时提升能量回收效率15%-20%。特别适合智能驾驶需求,可使AEB等系统响应时间缩短50ms,紧急制动距离减少1米以上。EMB系统完美契合高阶自动驾驶对快速响应和精准控制的要求。

m0_59012156的博客 885

用Python爬虫抓取大宗交易成交数据:全面解析与实战代码

大宗交易是指在证券市场中,涉及大额买卖的交易。此类交易通常由机构投资者进行,其交易量较大,对市场的影响显著。大宗交易数据包含了买卖双方的成交价格、成交量等关键信息,这些数据对于投资者和分析师而言,具有重要的市场预测意义。Python爬虫是一种自动化抓取互联网上数据的工具。通过爬虫,我们可以定期获取大宗交易数据,节省人工查询的时间。爬虫的工作原理通常包括:发送HTTP请求、获取响应数据、解析网页内容、提取关键信息、存储和展示数据。

2201_76125261的博客 417

iOS 九宫格手势密码

代码地址如下:http://www.demodashi.com/demo/11490.html 一、准备工作 需要准备什么环境 xcode,iOS8+ 本例子实现什么功能 主要实现手势密码设置,验证 二、程序实现 程序目录 实现思路及设计与代码 1 、分析问题 要实现该功能,难点在于,我们该怎么去实现线条的绘制。既然是手势移动,那么我们肯定会在移动过程中一直进行绘制,这样的话,我们就有两种

findhappy117的博客 552

【电源专题】Type-C母座外壳直接接主板GND还是接RC呢?别再纠结了!

Type-C屏蔽壳接地这件事,没有唯一标准答案。符合规范、贴合产品、能过认证,就是最优解。希望这篇文章能帮你理清思路。

一点硬件 595

iOS:使用贝塞尔曲线绘制图表(折线图、柱状图、饼状图)

1.介绍: UIBezierPath :画贝塞尔曲线的path类 UIBezierPath定义 : 贝赛尔曲线的每一个顶点都有两个控制点,用于控制在该顶点两侧的曲线的弧度。 曲线的定义有四个点:起始点、终止点(也称锚点)以及两个相互分离的中间点。 滑动两个中间点,贝塞尔曲线的形状会发生变化。 UIBezierPath :对象是CGPathRe...

weixin_33797791的博客 475

音视频开发基础(1):模拟视频技术简介

模拟视频技术是指用模拟技术对动态影像进行捕捉、记来、处理、存储、传输、复现的技术.模拟视频技术的发明、发展与模拟电视系统的发展密不可分.下面将通过模拟电视系统来介绍模拟视频技术中的基本概念. 首先,人的视觉系统的特征为电视等視稿系铳的发明、发展提供了理论依据.光线通过角膜、腫孔、晶状体的折射光线.透过玻璃体到达视网展.视网膜上分布着光感受器,光感受器在光线的剌激下...

琅嬛福地 1492

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Html 点透镂空遮罩,swift 实现遮罩部分区域“挖洞”效果和点击事件穿透

在日常开发中有时候我们需要在APP中做用户指导,比如第一次进入某个页面的时候显示遮罩覆盖, 但是又需要将遮罩下的某些区域暴露出来,便于文字说明,比如我们需要在视图上加个遮罩,并且遮罩上要显示 按钮2 :原图期待的效果图:按钮1被盖住,而 按钮2显示出来效果我们可以 在视图上加个遮罩,再往遮罩上画一个同样位置和样式的 按钮2 ,作为一个有追求的程序猿,我们是不能容忍这种 低效实现方式的。我们可以通...

weixin_33464176的博客 735

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

iOS贝塞尔曲线(UIBezierPath)的基本使用方法

简介 UIBezierPath是对Core Graphics框架的一个封装,使用UIBezierPath类我们可以画出圆形(弧线)或者多边形(比如:矩形)等形状,所以在画复杂图形的时候会经常用到。 分析 首先我们先看一下,UIBezierPath有哪些重要的属性: 1、 [color set]设置颜色,color为创建的UIColor对象 2、 [path stroke]填充view的线条的颜色,与[color set]配合使用 , 3、 [path fill]填充整个view内部的颜色,与[colo

u013712343的博客 2300

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

iOS开发 贝塞尔曲线UIBezierPath(后记)

使用CAShapeLayer与UIBezierPath可以实现不在view的drawRect方法中就画出一些想要的图形 。 1:UIBezierPath: UIBezierPath是在 UIKit 中的一个类,继承于NSObject,可以创建基于矢量的路径.此类是Core Graphics框架关于path的一个OC封装。使用此类可以定义常见的圆形、多边形等形状 。我们使用直线、弧(arc)来创建...

weixin_30448603的博客 202

UIBezierPath介绍

前言 UIBezierPath是UIKit中的一个关于图形绘制的类,是通过Quartz 2D也就是CG(Core Graphics)CGPathRef的封装得到的,从高级特性支持来看不及CG。 UIBezierPath类可以绘制矩形、圆形、直线、曲线以及它们的组合图形。 UIBezierPath对象 对象创建方法 // 创建基本路径 + (instancetype

Walden_tinghou的专栏 934

iOS开发UIBezierPath的详细介绍

使用UIBezierPath类可以创建基于矢量的路径,这个类在UIKit中.此类是Core Graphics框架关于path的一个封装.使用此类可以定义简单的形状,如椭圆或者矩形,或者有多个直线和曲线段组成的形状。 1.UIBezierPath基础    UIBezierPath对象是CGPathRef数据类型的封装。path如果是基于矢量形状的,都用直线和曲线段去创建。我们使用直线段去创建矩

wgl_happy的专栏 866

iOS: UIBezierPath简介及静态图形实现

UIBezierPath介绍 基本介绍: UIBezierPath可以用来创建矢量的路径和图形,使用此类可以定义各种图形。我们用直线和弧形的组合来创建复杂的图形。每一个直线段或者曲线段的结束的地方是下一个的开始的地方。每一个连接的直线或者曲线段的集合称为subpath。一个UIBezierPath对象的完整路径包括一个或者多个subpath。 UIBezierPath有两种实现方法: 1.使用CAShapeLayer与UIBezierPath配合画出一些想要的图形 。示例代码如下: UIBezi

KLong27的博客 878

UIBezierPath精讲

学习UIBezierPath画图 笔者在写本篇文章之前,也没有系统学习过贝塞尔曲线,只是曾经某一次的需求需要使用到,才临时百度看了一看而且使用最基本的功能。现在总算有时间停下来好好研究研究这个神奇而伟大的贝塞尔先生! 笔者在学习时,首先看了两遍UIBezierPath类头文件定义,熟悉了一下相关的属性和方法。 支持...

weixin_34384915的博客 282

iOS图形编辑之UIBezierPath小结

基础知识 使用UIBezierPath可以创建基于矢量的路径,此类是Core Graphics框架关于路径的封装。使用此类可以定义简单的形状,如椭圆、矩形或者有多个直线和曲线段组成的形状等。 UIBezierPath是CGPathRef数据类型的封装。如果是基于矢量形状的路径,都用直线和曲线去创建。我们使用直线段去创建矩形和多边形,使用曲线去创建圆弧(arc)、圆或者其他复杂的曲线形状。

LXL_815520的博客 1632

贝塞尔曲线(UIBezierPath)属性、方法汇总

UIBezierPath主要用来绘制矢量图形,它是基于Core Graphics对CGPathRef数据类型和path绘图属性的一个封装,所以是需要图形上下文的(CGContextRef),所以一般UIBezierPath在drawRect中使用。 UIBezierPath的属性介绍: 1.CGPath:将UIBezierPath类转换成CGPath,类似于UIColor的CGColor...

weixin_34378922的博客 227
上一篇: iOS程序猿之linux的cp/scp命令+scp命令详解
下一篇: iOS程序猿之CAShapeLayer类(动画)
iOS_wq
博客等级 码龄11年 10粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值