ios基础篇(二十)—— UIBezierPath绘制

UIBezierPath类可以创建基于矢量的路径,可以定义简单的形状,如椭圆或者矩形,或者有多个直线和曲线段组成的形状。

一、UIBezierPath使用:

1、创建path;

2、添加路径到path;

3、将path绘制出来;

1 //创建path
2     path = [UIBezierPath bezierPath];
3     //添加路径
4     [path moveToPoint:(CGPoint){10,50}];
5     [path addLineToPoint:(CGPoint){100,50}];
6     //将path绘制出来
7     [path stroke];
8     

二、实例

1、绘制多边形

注意:这个类要继承自UIView。

 1 #import "Draw.h"
 2
 3 @interface Draw (){
 4
 5 UIBezierPath *path;
 6
 7 }
 8
 9 @end
10
11 - (void)drawRect:(CGRect)rect {
12
13     //线条颜色
14     UIColor *color = [UIColor orangeColor];
15     [color set];
16
17     //创建path
18     path = [UIBezierPath bezierPath];
19     //设置线宽
20     path.lineWidth = 3;
21     //线条拐角
22     path.lineCapStyle = kCGLineCapRound;
23     //终点处理
24     path.lineJoinStyle = kCGLineJoinRound;
25
26     [path moveToPoint:(CGPoint){100,100}];
27     [path addLineToPoint:(CGPoint){200,100}];
28     [path addLineToPoint:(CGPoint){250,150}];
29     [path addLineToPoint:(CGPoint){200,200}];
30     [path addLineToPoint:(CGPoint){100,200}];
31     [path addLineToPoint:(CGPoint){50,150}];
32     [path closePath];
33     //根据坐标点连线
34
35     [path stroke];
36
37 }

如果修改最后一句代码将[path stroke]改成[path fill];

下面来看看区别,

2、绘制矩形

+ (UIBezierPath *)bezierPathWithRect:(CGRect)rect;

 1 - (void)drawRect:(CGRect)rect {
 2
 3     //线条颜色
 4     UIColor *color = [UIColor orangeColor];
 5     [color set];
 6
 7     //创建path
 8     //rect四个值分别为(x、y、矩形长,矩形宽)
 9     path = [UIBezierPath bezierPathWithRect:(CGRect){10,20,100,50}];
10     //设置线宽
11     path.lineWidth = 3;
12     //线条拐角
13     path.lineCapStyle = kCGLineCapRound;
14     //终点处理
15     path.lineJoinStyle = kCGLineJoinRound;
16
17     //根据坐标点连线
18     [path stroke];
19
20 }

3、绘制圆形或椭圆形

绘制圆形或椭圆形,我们我用

+ (UIBezierPath *)bezierPathWithOvalInRect:(CGRect)rect;

这个方法根据传入的rect矩形参数绘制一个内切曲线。

当传入的rect是一个正方形时,绘制的图像是一个内切圆;当传入的rect是一个长方形时,绘制的图像是一个内切椭圆。

 1 - (void)drawRect:(CGRect)rect {
 2
 3     //线条颜色
 4     UIColor *color = [UIColor orangeColor];
 5     [color set];
 6
 7     //添加路径
 8     path = [UIBezierPath bezierPathWithOvalInRect:(CGRect){50,50,100,100}];
 9     path.lineWidth = 3;
10     //线条拐角
11     path.lineCapStyle = kCGLineCapRound;
12     //终点处理
13     path.lineJoinStyle = kCGLineJoinRound;
14     //根据坐标点连线
15     [path stroke];
16
17 }

下面改变rect值,

path = [UIBezierPath bezierPathWithOvalInRect:(CGRect){50,50,100,50}];

4、绘制弧线

绘制弧线用方法:

+ (UIBezierPath *)bezierPathWithArcCenter:(CGPoint)center

                   radius:(CGFloat)radius

                 startAngle:(CGFloat)startAngle

                  endAngle:(CGFloat)endAngle

                  clockwise:(BOOL)clockwise;

其中 Center:圆弧的中心;

    radius:半径;

startAngle:开始角度;

endAngle:结束角度;

clockwise:是否顺时针方向;

#import "Draw.h"
//定义PI值
#define PI 3.14159265359

@interface Draw (){

UIBezierPath *path;

}

- (void)drawRect:(CGRect)rect {

    //线条颜色
    UIColor *color = [UIColor orangeColor];
    [color set];

    //添加路径
    path = [UIBezierPath bezierPathWithArcCenter:(CGPoint){100,50}
                                          radius:50
                                      startAngle:0
                                        endAngle:PI*0.5
                                       clockwise:YES
            ];
    path.lineWidth = 3;
    //线条拐角
    path.lineCapStyle = kCGLineCapRound;
    //终点处理
    path.lineJoinStyle = kCGLineJoinRound;

    //根据坐标点连线
    [path stroke];

}

5、二次贝塞尔曲线和三次贝塞尔曲线的绘制

曲线段在当前点开始,在指定的点结束;曲线的形状有开始点,结束点,一个或者多个控制点的切线定义。

下图显示了两种曲线类型的相似,以及控制点和curve形状的关系。

(1) 绘制二次贝塞尔曲线

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

 1 - (void)drawRect:(CGRect)rect {
 2
 3     //线条颜色
 4     UIColor *color = [UIColor orangeColor];
 5     [color set];
 6
 7     //添加路径
 8     path = [UIBezierPath bezierPath];
 9
10     path.lineWidth = 3;
11     //线条拐角
12     path.lineCapStyle = kCGLineCapRound;
13     //终点处理
14     path.lineJoinStyle = kCGLineJoinRound;
15
16     [path moveToPoint:(CGPoint){20,100}];
17     [path addQuadCurveToPoint:(CGPoint){100,100} controlPoint:(CGPoint){50,20}];
18
19     //根据坐标点连线
20     [path stroke];
21
22 }

(2) 绘制三次贝塞尔曲线

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

 1 - (void)drawRect:(CGRect)rect {
 2
 3     //线条颜色
 4     UIColor *color = [UIColor orangeColor];
 5     [color set];
 6
 7     //添加路径
 8     path = [UIBezierPath bezierPath];
 9
10     path.lineWidth = 3;
11     //线条拐角
12     path.lineCapStyle = kCGLineCapRound;
13     //终点处理
14     path.lineJoinStyle = kCGLineJoinRound;
15
16     [path moveToPoint:(CGPoint){20,100}];
17     [path addCurveToPoint:(CGPoint){150,70} controlPoint1:(CGPoint){70,30} controlPoint2:(CGPoint){80,120}];
18
19     //根据坐标点连线
20     [path stroke];
21
22 }

时间: 2024-10-12 09:49:28

ios基础篇(二十)—— UIBezierPath绘制的相关文章

ios基础篇(十二)——UINavgationController的使用(三)ToolBar

UIToolBar存在于UINavigationController导航栏控制器中,而且默认被隐藏:设置UINavigationController的toolbarHidden属性可显示UIToolBar. 一.UIToolBar的设置 1.在RootViewController.m的viewDidLoad方法中添加代码: [self.navigationController setToolbarHidden:NO animated:YES]; 如图:显示底部ToolBar 2.设置UITool

ios基础篇(十八)——Delegate 、NSNotification 和 KVO用法及其区别

一.Delegate Delegate本质是一种程序设计模型,iOS中使用Delegate主要用于两个页面之间的数据传递.iphone中常用@protocol和delegate的机制来实现接口的功能.例如想在A的功能要在B中实现,可以在A中定义一个Protocol. protocol用法: @interface ClassA :ClassB<protocol1, protocol2> 1.首先声明一个UIView类: @interface myView  :UIView{  } @end: 2

iOS基础篇(十五)——UIScrollView的基本用法

滚动视图(UIScrollView)通常用于显示内容尺寸大于屏幕尺寸的视图. 一.基本属性 1.CGSize contentSize :设置UIScrollView的滚动范围 2.CGPoint contentOffset :UIScrollView当前滚动的位置 3.UIEdgeInsets contentInset :设置内容的边缘 4.BOOL bounces 当超出边界时表示是否可以反弹 5.BOOL scrollEnabled 是否能滚动 6.BOOL showsHorizontalS

IOS 基础之 (二十二) 创建控制器

一 创建控制器 第1种方式 通过代码控制器 HKUIViewController.h #import <UIKit/UIKit.h> @interface HKUIViewController : UIViewController @end HKUIViewController.m #import "HKUIViewController.h" @implementation HKUIViewController @end AppDelegate.m - (BOOL)appl

ios基础篇(十)——UINavgationController的使用(一)UIBarButtonItem的添加

UINavigationController又被成为导航控制器,继承自UIViewController,以栈的方式管理所控制的视图控制器,下面就详细说一下UINavigationController的使用: 1.首先新建一个工程(就不多说了)创建RootViewController(继承自UIViewController). 2.打开AppDelegate.h文件添加属性 3.打开AppDelegate.m文件的 - (BOOL)application:(UIApplication *)appl

JMS基础篇(二)

简介 异构集成是消息发挥作用的一个领域,大型公司内部可能会遇到很多的平台,Java,.net或者公司自己的平台等. 传送消息还应该支持异步机制,以提高系统整体的性能.异步传输一条消息意味着,发送者不必等到接收者接收或者处理消息,可以接着做后续的处理. 应用程序发送消息至另外一个应用程序,需要使用到消息中间件.消息中间件应提供容错,负载均衡,可伸缩的事务性等特性. JMS与JDBC类似,是一种与厂商无关的API.应用程序开发者可以使用同样的API来访问不同的系统. 可以认为JMS是一种标准,各消息

[WebGL入门]二十,绘制立体模型(圆环体)

注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中如果有我的额外说明,我会加上[lufy:],另外,鄙人webgl研究还不够深入,一些专业词语,如果翻译有误,欢迎大家指正. 本次的demo的运行结果 立体的模型 这次稍微喘口气,开始绘制立体模型.这里说的[喘口气]是指本次的文章中没有出现任何新的技术知识点.只是利用到现在为止所介绍过的内容,来绘制一个立体的圆环体.到现在为止,只绘制了三角形和四边形,当然,在三维空间中绘制简单的多边形也没什么不对,但是缺点儿说服力.

php基础篇-二维数组排序 array_multisort

原文:php基础篇-二维数组排序 array_multisort 对2维数组或者多维数组排序是常见的问题,在php中我们有个专门的多维数组排序函数,下面简单介绍下: array_multisort(array1,sorting order, sorting type,array2,array3..)是对多个数组或多维数组进行排序的函数. array1 必需.规定输入的数组. sorting order 可选.规定排列顺序.可能的值是 SORT_ASC 和 SORT_DESC. sorting t

php基础篇-二维数组排序姐妹篇

前面介绍了php多维数组排序的一个函数array_multisort() ,想了解的人可以点击 二维数组排序 array_multisort 下面介绍下不适用array_multisort()进行多维数组的排序. 这里介绍下2个php排序函数,一个是asort,一个是arsort. asort(array,sorttype) 函数对数组进行排序并保持索引关系.主要用于对那些单元顺序很重要的结合数组进行排序. 可选的第二个参数包含了附加的排序标识. SORT_REGULAR - 默认.以它们原来的

Qt入门之基础篇 ( 二 ) :Qt项目建立、编译、运行和发布过程解析

转载请注明出处:CN_Simo. 题解: 本篇内容主讲Qt应用从创建到发布的整个过程,旨在帮助读者能够快速走进Qt的世界. 本来计划是讲解Qt源码静态编译,如此的话读者可能并不能清楚地知道为何要静态编译,所以借此篇内容说明一下原由并为之后文章的学习做准备. 即使本片内容只是在围绕一个小小的HelloWorld程序开展,但还是希望朋友们不要急于求成,"欲速则不达". 文章整体思路: 我们循序渐进地来看,一个Qt应用的完成有以下一个重要的步骤: 项目创建->源码编译->程序运行