UIBezierPath是在画图,定制动画轨迹中都有应用。

UIBezierPath主要用来绘制矢量图形,它是基于Core Graphics对CGPathRef数据类型和path绘图属性的一个封装,所以是需要图形上下文的(CGContextRef),所以一般UIBezierPath在drawRect中使用。

本文主要介绍了iOS 贝塞尔曲线(UIBezierPath)属性、方法的相关详解资料,供大家参考,如有错漏,欢迎留言指正。

一、引入头文件:

#import

#import

#import

二、如果需要每个属性或每个方法都去指定nonnull和nullable,是一件非常繁琐的事。苹果为了减轻我们的工作量,专门提供了两个宏:

NS_ASSUME_NONNULL_BEGIN

...

NS_ASSUME_NONNULL_END

宏定义:Nonnull区域设置(Audited Regions)

在这两个宏之间的代码,所有简单指针对象都被假定为nonnull,因此我们只需要去指定那些nullable的指针。

三、按位掩码(bitmask)

注意:并不是枚举

typedef NS_OPTIONS(NSUInteger, UIRectCorner) {

UIRectCornerTopLeft = 1 << 0, // 指定UIView左上角为圆角

UIRectCornerTopRight = 1 << 1, // 指定UIView右上角为圆角

UIRectCornerBottomLeft = 1 << 2, // 指定UIView左下角为圆角

UIRectCornerBottomRight = 1 << 3, // 指定UIView右下角为圆角

UIRectCornerAllCorners = ~0UL // 指定UIView四个角均为圆角

};

按位掩码(NS_OPTIONS)的语法和枚举(NS_ENUM)相同,但编译器会将它的值通过位掩码 | 组合在一起。

四、系统库头文件中的宏定义:

NS_CLASS_AVAILABLE_IOS(3_2) [@interface](https://my.oschina.net/u/996807) UIBezierPath : NSObject

NS_CLASS_AVAILABLE_IOS(3_2) :代表只可以在iOS3.2及以后的版本中使用,如果在比3.2更老的版本中调用这个方法,就会引起崩溃

NS_DESIGNATED_INITIALIZER

NS_DESIGNATED_INITIALIZER :指定构造器,告诉调用者要用这个方法去初始化(构造)类对象。

NS_RETURNS_INNER_POINTER

说明该方法返回的是一个对象的内部C指针

CF_RETURNS_NOT_RETAINED

标记为 CF_RETURNS_RETAINED 或 CF_RETURNS_NOT_RETAINED。编译器在编译时会自动为他们加上内存管理相关的调用。

五、方法属性详解:

// 创建UIBezierPath曲线对象

+ (instancetype)bezierPath;

// 创建画矩形的UIBezierPath曲线对象

+ (instancetype)bezierPathWithRect:(CGRect)rect;

// 创建根据矩形框的画内切圆的UIBezierPath曲线对象

+ (instancetype)bezierPathWithOvalInRect:(CGRect)rect;

// 创建画四个角都带圆角的矩形的UIBezierPath曲线对象

+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect cornerRadius:(CGFloat)cornerRadius; // rounds all corners with the same horizontal and vertical radius

// 创建可以针对四角中的某个角加圆角的UIBezierPath曲线对象

+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect byRoundingCorners:(UIRectCorner)corners cornerRadii:(CGSize)cornerRadii;

// 创建以某个中心点画弧线的UIBezierPath曲线对象

+ (instancetype)bezierPathWithArcCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise;

// 根据已有路径创建UIBezierPath曲线对象

+ (instancetype)bezierPathWithCGPath:(CGPathRef)CGPath;

// 初始化方法

- (instancetype)init NS_DESIGNATED_INITIALIZER;

// 建议使用的初始化方法

- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER;

// Returns an immutable CGPathRef which is only valid until the UIBezierPath is further mutated.

// Setting the path will create an immutable copy of the provided CGPathRef, so any further mutations on a provided CGMutablePathRef will be ignored.

// 将UIBezierPath类转换成CGPath,类似于UIColor的CGColor

@property(nonatomic) CGPathRef CGPath;

// 转换成CGPath

- (CGPathRef)CGPath NS_RETURNS_INNER_POINTER CF_RETURNS_NOT_RETAINED;

// Path construction

// 移动到某一点

- (void)moveToPoint:(CGPoint)point;

// 向某一点绘制一条线

- (void)addLineToPoint:(CGPoint)point;

// 根据三个点绘制三次贝塞尔曲线

- (void)addCurveToPoint:(CGPoint)endPoint controlPoint1:(CGPoint)controlPoint1 controlPoint2:(CGPoint)controlPoint2;

// 根据两个点绘制二次贝塞尔曲线

- (void)addQuadCurveToPoint:(CGPoint)endPoint controlPoint:(CGPoint)controlPoint;

// 根据圆心、半径画圆弧

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

// 闭合路径,即在终点与起点连一根线

- (void)closePath;

// 清空所有路径

- (void)removeAllPoints;

// Appending paths

// 追加路径

- (void)appendPath:(UIBezierPath *)bezierPath;

// Modified paths

// 扭转路径,即起点变成终点,终点变成起点

- (UIBezierPath *)bezierPathByReversingPath NS_AVAILABLE_IOS(6_0);

// Transforming paths

// 路径进行仿射变换

- (void)applyTransform:(CGAffineTransform)transform;

// Path info

// 只读类型,路径上是否有有效的元素

@property(readonly,getter=isEmpty) BOOL empty;

// 和view的bounds是不一样的,它获取path的X坐标、Y坐标、宽度,但是高度为0

@property(nonatomic,readonly) CGRect bounds;

// 当前path的位置,可以理解为path的终点

@property(nonatomic,readonly) CGPoint currentPoint;

// 是否路径中包含某个点

- (BOOL)containsPoint:(CGPoint)point;

// Drawing properties

// 路径线条的宽度

@property(nonatomic) CGFloat lineWidth;

/** path端点样式,有3种样式

* kCGLineCapButt:无端点

* kCGLineCapRound:圆形端点

* kCGLineCapSquare:方形端点(样式上和kCGLineCapButt是一样的,但是比kCGLineCapButt长一点)

*/

@property(nonatomic) CGLineCap lineCapStyle;

// 拐角样式

@property(nonatomic) CGLineJoin lineJoinStyle;

// 最大斜接长度(只有在使用kCGLineJoinMiter是才有效),边角的角度越小,斜接长度就会越大

@property(nonatomic) CGFloat miterLimit; // Used when lineJoinStyle is kCGLineJoinMiter

// 弯曲路径的渲染精度,默认为0.6,越小精度越高,相应的更加消耗性能

@property(nonatomic) CGFloat flatness;

// 单双数圈规则是否用于绘制路径,默认是NO

@property(nonatomic) BOOL usesEvenOddFillRule; // Default is NO. When YES, the even-odd fill rule is used for drawing, clipping, and hit testing.

// 绘制虚线

- (void)setLineDash:(nullable const CGFloat *)pattern count:(NSInteger)count phase:(CGFloat)phase;

// 获取虚线

- (void)getLineDash:(nullable CGFloat *)pattern count:(nullable NSInteger *)count phase:(nullable CGFloat *)phase;

// Path operations on the current graphics context

// 填充颜色

- (void)fill;

// 描边,路径创建需要描边才能显示出来

- (void)stroke;

// These methods do not affect the blend mode or alpha of the current graphics context

// 设置填充的混合模式

- (void)fillWithBlendMode:(CGBlendMode)blendMode alpha:(CGFloat)alpha;

// 设置描边的混合模式

- (void)strokeWithBlendMode:(CGBlendMode)blendMode alpha:(CGFloat)alpha;

// 利用当前的path进行裁剪,简单的说,就是一个path调用addClip之后,它所在的context的可见区域就变成了它的“fill area”,接下来的绘制,如果在这个区域外都会被无视。

- (void)addClip;

在生活中学习技术,在技术中感受生活。

——Jinfei Chen QQ:411282623

ios 贝塞尔曲线 颜色填充_iOS UIBezierPath贝赛尔曲线详解相关推荐

  1. ios 贝塞尔曲线 颜色填充_IOS 贝塞尔曲线(UIBezierPath)属性、方法整理

    IOS 贝塞尔曲线详解 开发IOS的朋友都知道IOS 贝塞尔曲线的重要性,由于经常会用到这样的东西,索性抽时间就把相应所有的属性,方法做一个总结. UIBezierPath主要用来绘制矢量图形,它是基 ...

  2. ios 贝塞尔曲线 颜色填充_iOS贝塞尔曲线(UIBezierPath)的基本使用方法

    简介 UIBezierPath是对Core Graphics框架的一个封装,使用UIBezierPath类我们可以画出圆形(弧线)或者多边形(比如:矩形)等形状,所以在画复杂图形的时候会经常用到. 分 ...

  3. ios 贝塞尔曲线 颜色填充_iOS,贝塞尔曲线(UIBezierPath)

    UIBezierPath简介 使用UIBezierPath类可以创建基于矢量的路径,这个类在UIKit中.此类是Core Graphics框架关于path的一个封装, UIBezierPath对象是C ...

  4. ios 贝塞尔曲线 颜色填充_PS的3D颜色深度映射到球体模拟天线

    接着上次的→→EXCEL利用贝塞尔函数模拟天线3D方向图 一.用EXCEL尝试绘制成类似下面极坐标的方向图 还是先从2D入手 把X轴扩展到XY平面,先尝试用20×20个点来试一下 利用下面的代码批量单 ...

  5. css_transition_animation(内含贝赛尔曲线详解)

    css_transition_animation(内含贝赛尔曲线详解) 区别: transition也叫过渡动画,主要是用于让一个元素从一种状态过渡到另一种状态效果,常用于主动触发的效果.例如移动端的 ...

  6. PS中色相饱合度/可选颜色/色彩平衡/曲线的区别和运用方法详解

    http://www.jb51.net/photoshop/374517.html PS中色相饱合度/可选颜色/色彩平衡/曲线的区别和运用方法详解 整体思路: 1.使用颜色混合模式营造照片基调. 2. ...

  7. Js获取图片主色调,近似色,互补色,以及根据图片颜色获取主题配色方案详解、插件。

    Js获取图片主色调,近似色,互补色,以及根据图片颜色获取主题配色方案详解.插件. **应用场景:**在很多时候,前端开发过程中需要动态的获取图片的主要的颜色值,并根据主色调去调整主题样式的颜色或者模拟 ...

  8. UIBezierPath IOS贝塞尔曲线

    //记录  贝塞尔曲线使用 //根据一个矩形画曲线 + (UIBezierPath *)bezierPathWithRect:(CGRect)rect //根据矩形框的内切圆画曲线 + (UIBezi ...

  9. IOS贝塞尔曲线圆形进度条和加载动画

    做项目让做一个加载动画,一个圈圈在转中间加一个图片,网上有好多demo,这里我也自己写了一个,中间的图片可加可不加.其中主要用到贝塞尔曲线.UIBezierPath是对CGContextRef的进一步 ...

最新文章

  1. 10个问题看透Transformer
  2. 清华大学大数据研究中心“RONG”奖学金申请通知
  3. 物理光学5 色散、吸收与散射
  4. 新编C语言程序设计入门,新编C语言程序设计教程(本科)第3篇.pdf
  5. python中round函数参数_python中关于round函数的小坑
  6. !KMP算法完整教程
  7. mysql数据库架构_MySQL数据库之互联网常用架构方案
  8. Oracle 表的连接方式(1)-----Nested loop join和 Sort merge join
  9. Windows phone 开发基础(14) WP8磁贴分两种的创建方式(内建和外建)
  10. python在律师上作中的实例_基于Python的律师信息查询接口调用代码实例
  11. 【关系抽取】从头来看关系抽取-远程监督来袭
  12. 重构计算力 浪潮M5新一代服务器闪耀登场
  13. 微猫恋爱聊妹术V2小程序源码4.1.0多开版 附安装及前端调试教程
  14. 软件需求分析——需求工程导论
  15. CRM客户管理系统源码,基于ThinkPHP开发
  16. 文本表达:解决BERT中的各向异性方法总结
  17. 进出口业务财务一体化外贸流程管理解决方案
  18. 不同产品生命周期的营销策略
  19. 序列化Serializable serialVersionUID的作用
  20. 北京第二外国语学院本科毕业论文答辩PPT模板

热门文章

  1. 苹果livp格式heic怎么批量转成jpg,怎么打开图片
  2. 解决命令行运行python文件,出现No module named *** 报错问题
  3. Cadence virtuoso 常用快捷键汇总
  4. 我的世界学园都市java_[AC]超能力/学园都市 (AcademyCraft)
  5. SuperDog——一个基于netty的web服务器开发项目
  6. ZZ:浅析iPhone 5s、Ascend P7、小米3系统架构
  7. 魔兽世界经典旧世私服搭建教程
  8. iview table使用render函数实现关键字高亮
  9. Linux : select()详解 和 实现原理【转】
  10. 美男有毒html5游戏在线玩,美男有毒h5在线