#ifndef CGPATH_H_
#define CGPATH_H_ForeverGuard博客园
#include <CoreFoundation/CFBase.h>
#include <CoreFoundation/CFAvailability.h>
#include <stdint.h> typedef struct CF_BRIDGED_TYPE(id) CGPath *CGMutablePathRef;
typedef const struct CF_BRIDGED_TYPE(id) CGPath *CGPathRef; #include <CoreGraphics/CGBase.h>
#include <CoreGraphics/CGAffineTransform.h>
#include <CoreFoundation/CFBase.h> CF_IMPLICIT_BRIDGING_ENABLED CF_ASSUME_NONNULL_BEGIN /* Line join styles. */ typedef CF_ENUM(int32_t, CGLineJoin) {
kCGLineJoinMiter,
kCGLineJoinRound,
kCGLineJoinBevel
}; /* Line cap styles. */ typedef CF_ENUM(int32_t, CGLineCap) {
kCGLineCapButt,
kCGLineCapRound,
kCGLineCapSquare
}; /*CFTypeID CGPath类在CoreGraphics框架中的唯一标识 */
CG_EXTERN CFTypeID CGPathGetTypeID(void)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); /* 创建一个srtuct CGPath * 指针 ,可变的CGPath类*/
CG_EXTERN CGMutablePathRef CGPathCreateMutable(void)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); /* 通过一个CGPathRef创建CGPathRef. */
CG_EXTERN CGPathRef __nullable CGPathCreateCopy(CGPathRef cg_nullable path)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); /* 通过创建CGPathRef得到的路径进行transform矩阵变换后返回 */
CG_EXTERN CGPathRef __nullable CGPathCreateCopyByTransformingPath(
CGPathRef cg_nullable path, const CGAffineTransform * __nullable transform)
CG_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_5_0); /* 通过CGPathRef创建可变的CGMutablePathRef */
CG_EXTERN CGMutablePathRef __nullable CGPathCreateMutableCopy(
CGPathRef cg_nullable path)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); /* 通过创建CGMutablePathRef得到的路径进行transform矩阵变换后返回 */
CG_EXTERN CGMutablePathRef __nullable CGPathCreateMutableCopyByTransformingPath(
CGPathRef cg_nullable path, const CGAffineTransform * __nullable transform)
CG_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_5_0); /* 创建矩形路径,第一个参数绘制的矩形区域 第二个参数进行transform矩阵变换 */
CG_EXTERN CGPathRef CGPathCreateWithRect(CGRect rect,
const CGAffineTransform * __nullable transform)
CG_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_4_0); /* 创建椭圆形路径 第一个参数绘制的区域 第二个参数进行transform矩阵变换 */
CG_EXTERN CGPathRef CGPathCreateWithEllipseInRect(CGRect rect,
const CGAffineTransform * __nullable transform)
CG_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_5_0); /**
创建圆角矩形路径 @param rect 矩形区域
@param cornerWidth 横向圆角尺寸
@param cornerHeight 纵向圆角尺寸
@param transform 矩阵
*/
CG_EXTERN CGPathRef CGPathCreateWithRoundedRect(CGRect rect,
CGFloat cornerWidth, CGFloat cornerHeight,
const CGAffineTransform * __nullable transform)
CG_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_7_0); /**
圆角矩形路径 @param path 可变的CGMutablePathRef
@param transform 矩阵
@param rect 矩形区域
@param cornerWidth 横向圆角尺寸
@param cornerHeight 纵向圆角尺寸
*/
CG_EXTERN void CGPathAddRoundedRect(CGMutablePathRef cg_nullable path,
const CGAffineTransform * __nullable transform, CGRect rect,
CGFloat cornerWidth, CGFloat cornerHeight)
CG_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_7_0); /**
创建虚线路径 @param path 进行虚化的路径
@param transform 矩阵
@param phase 从lengths数组的第几部分开始绘制
@param lengths C风格数组 {2,4}:表示先绘制实线为长度为2,在绘制空白长度为4 类推
@param count 设置lengths数组的长度
*/
CG_EXTERN CGPathRef __nullable CGPathCreateCopyByDashingPath(
CGPathRef cg_nullable path, const CGAffineTransform * __nullable transform,
CGFloat phase, const CGFloat * __nullable lengths, size_t count)
CG_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_5_0); /**
创建斜线 @param path 路径
@param transform 矩阵
@param lineWidth 线宽
@param lineCap 线冒(枚举)
@param lineJoin 连接处线的风格(枚举)
@param miterLimit 连接处角的锋利程度 typedef CF_ENUM(int32_t, CGLineJoin) {
kCGLineJoinMiter, 锋利
kCGLineJoinRound, 圆角
kCGLineJoinBevel 贝塞尔风格
}; typedef CF_ENUM(int32_t, CGLineCap) {
kCGLineCapButt, 线冒精确到点(默认)
kCGLineCapRound, 线冒为半径为线宽一半的圆弧
kCGLineCapSquare 线冒尖锐的过渡
};
*/
CG_EXTERN CGPathRef __nullable CGPathCreateCopyByStrokingPath(
CGPathRef cg_nullable path, const CGAffineTransform * __nullable transform,
CGFloat lineWidth, CGLineCap lineCap,
CGLineJoin lineJoin, CGFloat miterLimit)
CG_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_5_0); /* 引用计数+1 */
CG_EXTERN CGPathRef cg_nullable CGPathRetain(CGPathRef cg_nullable path)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); /* 引用计数-1*/
CG_EXTERN void CGPathRelease(CGPathRef cg_nullable path)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); /*两个图形路径是否相等*/
CG_EXTERN bool CGPathEqualToPath(CGPathRef cg_nullable path1,
CGPathRef cg_nullable path2)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); /*** Path construction functions. ***/ /* 路径起点 */
CG_EXTERN void CGPathMoveToPoint(CGMutablePathRef cg_nullable path,
const CGAffineTransform * __nullable m, CGFloat x, CGFloat y)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); /* 路径移动到某一点画一条直线 */
CG_EXTERN void CGPathAddLineToPoint(CGMutablePathRef cg_nullable path,
const CGAffineTransform * __nullable m, CGFloat x, CGFloat y)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); /* 向路径中添加一段二次贝塞尔曲线
cpx:控制点的x坐标
cpy:控制点的y坐标 */
CG_EXTERN void CGPathAddQuadCurveToPoint(CGMutablePathRef cg_nullable path,
const CGAffineTransform *__nullable m, CGFloat cpx, CGFloat cpy,
CGFloat x, CGFloat y)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); /* 添加一段三次贝塞尔曲线*/
CG_EXTERN void CGPathAddCurveToPoint(CGMutablePathRef cg_nullable path,
const CGAffineTransform * __nullable m, CGFloat cp1x, CGFloat cp1y,
CGFloat cp2x, CGFloat cp2y, CGFloat x, CGFloat y)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); /* 闭合路径 最后的终点和起点闭合 */
CG_EXTERN void CGPathCloseSubpath(CGMutablePathRef cg_nullable path)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); /*** Path construction convenience functions. ***/ /* 向路径中追加一个矩形*/
CG_EXTERN void CGPathAddRect(CGMutablePathRef cg_nullable path,
const CGAffineTransform * __nullable m, CGRect rect)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); /* 向路径中追加一组矩形 */
CG_EXTERN void CGPathAddRects(CGMutablePathRef cg_nullable path,
const CGAffineTransform * __nullable m, const CGRect * __nullable rects,
size_t count)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); /* 向路径中追加一组线条 */
CG_EXTERN void CGPathAddLines(CGMutablePathRef cg_nullable path,
const CGAffineTransform * __nullable m, const CGPoint * __nullable points,
size_t count)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); /*向路径中追加一组椭圆*/
CG_EXTERN void CGPathAddEllipseInRect(CGMutablePathRef cg_nullable path,
const CGAffineTransform * __nullable m, CGRect rect)
CG_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0); /*向路径中追加一组圆弧
x:圆心x坐标
y:圆心y坐标
radius:弧线半径
startAngle:起始角度
delta:圆弧绘制的长度 为弧度制 2π为整个圆
*/
CG_EXTERN void CGPathAddRelativeArc(CGMutablePathRef cg_nullable path,
const CGAffineTransform * __nullable matrix, CGFloat x, CGFloat y,
CGFloat radius, CGFloat startAngle, CGFloat delta)
CG_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_5_0); /*向路径中追加一组圆弧
x:圆心x坐标
y:圆心y坐标
radius:弧线半径
startAngle:起始角度
endAngle:终止角度
clockwise:是否顺时针绘制
*/
CG_EXTERN void CGPathAddArc(CGMutablePathRef cg_nullable path,
const CGAffineTransform * __nullable m,
CGFloat x, CGFloat y, CGFloat radius, CGFloat startAngle, CGFloat endAngle,
bool clockwise)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); /* 向路径中追加一段圆弧 弧线是以(x1,y1)到(x2,y2)为切线的弧线 */
CG_EXTERN void CGPathAddArcToPoint(CGMutablePathRef cg_nullable path,
const CGAffineTransform * __nullable m, CGFloat x1, CGFloat y1,
CGFloat x2, CGFloat y2, CGFloat radius)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); /* /向路径中追加一段路径 */
CG_EXTERN void CGPathAddPath(CGMutablePathRef cg_nullable path1,
const CGAffineTransform * __nullable m, CGPathRef cg_nullable path2)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); /*** Path information functions. ***/ /* 判断路径是否为空*/
CG_EXTERN bool CGPathIsEmpty(CGPathRef cg_nullable path)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); /* 判断路径是否为某个矩形 */
CG_EXTERN bool CGPathIsRect(CGPathRef cg_nullable path, CGRect * __nullable rect)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); /*获取路径当前绘制所在的点*/
CG_EXTERN CGPoint CGPathGetCurrentPoint(CGPathRef cg_nullable path)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); /* 获取路径包含所有点的尺寸 */
CG_EXTERN CGRect CGPathGetBoundingBox(CGPathRef cg_nullable path)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); /*获取某个路径的尺寸 */
CG_EXTERN CGRect CGPathGetPathBoundingBox(CGPathRef cg_nullable path)
CG_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_4_0); /* 判断路径是否包含某个点 */
CG_EXTERN bool CGPathContainsPoint(CGPathRef cg_nullable path,
const CGAffineTransform * __nullable m, CGPoint point, bool eoFill)
CG_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0); /* The types of path elements returned by `CGPathApply'. */
//当每次向CGPath路径做操作时,操作的过程实际上都会被记录下来,每个操作行为节点都被封装为了CGPathElement结构体
typedef CF_ENUM(int32_t, CGPathElementType) {
kCGPathElementMoveToPoint, //移动到点的操作
kCGPathElementAddLineToPoint, //添加到线的操作
kCGPathElementAddQuadCurveToPoint, //添加到二次贝塞尔曲线的操作
kCGPathElementAddCurveToPoint, //添加到三次贝塞尔曲线的操作
kCGPathElementCloseSubpath //闭合路径的操作
};
struct CGPathElement {
CGPathElementType type;//操作点的类型
CGPoint * points;//对应的点集
};
typedef struct CGPathElement CGPathElement; /* 函数指针 */
typedef void (*CGPathApplierFunction)(void * __nullable info,
const CGPathElement * element); /* 获取所有操作行为 */
CG_EXTERN void CGPathApply(CGPathRef cg_nullable path, void * __nullable info,
CGPathApplierFunction cg_nullable function)
CG_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0); typedef void (^CGPathApplyBlock)(const CGPathElement * element); CG_EXTERN void CGPathApplyWithBlock(CGPathRef path, CGPathApplyBlock CF_NOESCAPE block)
CG_AVAILABLE_STARTING(__MAC_10_13, __IPHONE_11_0); CF_ASSUME_NONNULL_END CF_IMPLICIT_BRIDGING_DISABLED #endif /* CGPATH_H_ */

iOS之CGPath相关属性(一)的更多相关文章

  1. 修改UIBarButtonItem字体大小、颜色等相关属性

    在ios中如果想修改UIBarButtonItem里面的内容有很多种方法,常见的就是自定义contentView  但是有时候因为懒不想自定义只想在原来的文字上进行修改 如果只是修改UIBarButt ...

  2. IOS开发UI基础UITextFidle相关属性

    UITextFidle相关属性 •    enablesReturnKeyAutomatically默认为No,如果设置为Yes,文本框中没有输入任何字符的话,右下角的返回按钮是disabled的. ...

  3. iOS开发笔记--UILabel的相关属性设置

    在iOS编程中UILabel是一个常用的控件,下面分享一下UILabel的相关属性设置的方法. 很多学习iOS6编程都是从storyboard开始,用到UILabel时是将控件拖到storyboard ...

  4. IOS开发UI基础UITextView相关属性

    UITextView相关属性 •    text: 设置textView中文本_textView.text = @"Now is the time for all good develope ...

  5. UILabel的相关属性设置

    在iOS编程中UILabel是一个常用的控件,下面分享一下UILabel的相关属性设置的方法. 很多学习iOS6编程都是从storyboard开始,用到UILabel时是将控件拖到storyboard ...

  6. iOS数据存储之属性列表理解

    iOS数据存储之属性列表理解 数据存储简介 数据存储,即数据持久化,是指以何种方式保存应用程序的数据. 我的理解是,开发了一款应用之后,应用在内存中运行时会产生很多数据,这些数据在程序运行时和程序一起 ...

  7. iOS:UITableView相关(18-10-20更)

    UITableView用得较多,遇到的情况也较多,单独记录一篇. 一.零散的技巧 二.取cell 三.cell高度 四.导航栏.TableView常见问题相关 五.自定义左滑删除按钮图片 六.仅做了解 ...

  8. Core Animation 文档翻译—附录A(Layer样貌相关属性动画)

    前言   在渲染过程中,核心动画获取Layer的各种属性并以特定的顺序渲染他们.这个顺序决定了Layer的最终的样貌.本节将会阐述通过设置不同的Layer样貌相关属性对应产生的渲染结果. 注意:Mac ...

  9. iOS 内购相关

    iOS 内购相关 下面总结一下过往订阅和内购的项目的代码方面的实现细节和注意事项,特别是掉单方面的处理. 后台的协议.商品ID.银行卡.内购类型.沙盒账号测试人员都由运营或者产品在苹果后台中申请处理. ...

随机推荐

  1. haproxy Mycat集2---KeepAlived

    KA 配两台 MASTER,BACKUP节点 安装Keepalived 1.下载安装依赖包 yum install -y wget make gcc openssl-devel popt-devel ...

  2. D3.js坐标轴的绘制方法、添加坐标轴的刻度和各比例尺的坐标轴(V3版本)

    坐标轴(Axis)   坐标轴(Axis)在很多图表中都可见到,例如柱形图.折线图.散点图等.坐标轴由一组线段和文字组成,坐标轴上的点由一个坐标值确定.但是,如果使用SVG的直线和文字一笔一画的绘制坐 ...

  3. .net 接受请求过来的流

    //接收POST过来的数据 System.IO.Stream s = Request.InputStream; int count = 0; byte[] buffer = new byte[1024 ...

  4. postman连接不了localhost问题解决

    学习搭建服务器可用postman 连接不了localhost的端口 网上好多教程是这样连接 看完视频后我们是这样 找了大量资料都解决不了,什么版本,什么证书的都不好使,最简单的就是去掉http:// ...

  5. JPA 基本使用

    ORM简介 对象关系映射(Object Relational Mapping,简称ORM),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换. 实现ORM思想的框架:Mybati ...

  6. 2019亚太内容分发大会,阿里云获CDN领袖奖、技术突破奖

    近日,亚太CDN产业联盟主办的2019亚太内容分发大会在上海召开.本次大会以"5G分发"为主题,集结了CDN领域近千名行业领袖.专家参与.在会上,阿里云斩获“CDN领袖奖”.“技术 ...

  7. thinkphp 使用php代码

    Php代码可以和标签在模板文件中混合使用,可以在模板文件里面书写任意的PHP语句代码 ,包括下面两种方式: 直线电机选购 第一种:使用php标签 例如: <php>echo 'Hello, ...

  8. duilib教程之duilib入门简明教程17.事件处理和消息响应

    界面的显示方面就都讲完啦,下面来介绍下控件的响应.    前面的教程只讲了按钮和Tab的响应,即在Notify函数里处理.其实duilib还提供了另外一种响应的方法,即消息映射DUI_BEGIN_ME ...

  9. grunt是什么

    Grunt是什么? 博客分类: Grunt GruntJavascript  Grunt是一个自动化的项目构建工具.如果你需要重复的执行像压缩,编译,单元测试,代码检查以及打包发布的任务.那么你可以使 ...

  10. (37)C#Linq

    https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/let-clause 一.定义 Linq(Lang ...