ios 贝塞尔曲线 颜色填充_iOS UIBezierPath贝赛尔曲线详解
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贝赛尔曲线详解相关推荐
- ios 贝塞尔曲线 颜色填充_IOS 贝塞尔曲线(UIBezierPath)属性、方法整理
IOS 贝塞尔曲线详解 开发IOS的朋友都知道IOS 贝塞尔曲线的重要性,由于经常会用到这样的东西,索性抽时间就把相应所有的属性,方法做一个总结. UIBezierPath主要用来绘制矢量图形,它是基 ...
- ios 贝塞尔曲线 颜色填充_iOS贝塞尔曲线(UIBezierPath)的基本使用方法
简介 UIBezierPath是对Core Graphics框架的一个封装,使用UIBezierPath类我们可以画出圆形(弧线)或者多边形(比如:矩形)等形状,所以在画复杂图形的时候会经常用到. 分 ...
- ios 贝塞尔曲线 颜色填充_iOS,贝塞尔曲线(UIBezierPath)
UIBezierPath简介 使用UIBezierPath类可以创建基于矢量的路径,这个类在UIKit中.此类是Core Graphics框架关于path的一个封装, UIBezierPath对象是C ...
- ios 贝塞尔曲线 颜色填充_PS的3D颜色深度映射到球体模拟天线
接着上次的→→EXCEL利用贝塞尔函数模拟天线3D方向图 一.用EXCEL尝试绘制成类似下面极坐标的方向图 还是先从2D入手 把X轴扩展到XY平面,先尝试用20×20个点来试一下 利用下面的代码批量单 ...
- css_transition_animation(内含贝赛尔曲线详解)
css_transition_animation(内含贝赛尔曲线详解) 区别: transition也叫过渡动画,主要是用于让一个元素从一种状态过渡到另一种状态效果,常用于主动触发的效果.例如移动端的 ...
- PS中色相饱合度/可选颜色/色彩平衡/曲线的区别和运用方法详解
http://www.jb51.net/photoshop/374517.html PS中色相饱合度/可选颜色/色彩平衡/曲线的区别和运用方法详解 整体思路: 1.使用颜色混合模式营造照片基调. 2. ...
- Js获取图片主色调,近似色,互补色,以及根据图片颜色获取主题配色方案详解、插件。
Js获取图片主色调,近似色,互补色,以及根据图片颜色获取主题配色方案详解.插件. **应用场景:**在很多时候,前端开发过程中需要动态的获取图片的主要的颜色值,并根据主色调去调整主题样式的颜色或者模拟 ...
- UIBezierPath IOS贝塞尔曲线
//记录 贝塞尔曲线使用 //根据一个矩形画曲线 + (UIBezierPath *)bezierPathWithRect:(CGRect)rect //根据矩形框的内切圆画曲线 + (UIBezi ...
- IOS贝塞尔曲线圆形进度条和加载动画
做项目让做一个加载动画,一个圈圈在转中间加一个图片,网上有好多demo,这里我也自己写了一个,中间的图片可加可不加.其中主要用到贝塞尔曲线.UIBezierPath是对CGContextRef的进一步 ...
最新文章
- 10个问题看透Transformer
- 清华大学大数据研究中心“RONG”奖学金申请通知
- 物理光学5 色散、吸收与散射
- 新编C语言程序设计入门,新编C语言程序设计教程(本科)第3篇.pdf
- python中round函数参数_python中关于round函数的小坑
- !KMP算法完整教程
- mysql数据库架构_MySQL数据库之互联网常用架构方案
- Oracle 表的连接方式(1)-----Nested loop join和 Sort merge join
- Windows phone 开发基础(14) WP8磁贴分两种的创建方式(内建和外建)
- python在律师上作中的实例_基于Python的律师信息查询接口调用代码实例
- 【关系抽取】从头来看关系抽取-远程监督来袭
- 重构计算力 浪潮M5新一代服务器闪耀登场
- 微猫恋爱聊妹术V2小程序源码4.1.0多开版 附安装及前端调试教程
- 软件需求分析——需求工程导论
- CRM客户管理系统源码,基于ThinkPHP开发
- 文本表达:解决BERT中的各向异性方法总结
- 进出口业务财务一体化外贸流程管理解决方案
- 不同产品生命周期的营销策略
- 序列化Serializable serialVersionUID的作用
- 北京第二外国语学院本科毕业论文答辩PPT模板
热门文章
- 苹果livp格式heic怎么批量转成jpg,怎么打开图片
- 解决命令行运行python文件,出现No module named *** 报错问题
- Cadence virtuoso 常用快捷键汇总
- 我的世界学园都市java_[AC]超能力/学园都市 (AcademyCraft)
- SuperDog——一个基于netty的web服务器开发项目
- ZZ:浅析iPhone 5s、Ascend P7、小米3系统架构
- 魔兽世界经典旧世私服搭建教程
- iview table使用render函数实现关键字高亮
- Linux : select()详解 和 实现原理【转】
- 美男有毒html5游戏在线玩,美男有毒h5在线