使用UIBezierPath可以创建基于矢量的路径。使用此类可以定义简单的形状,如椭圆、矩形或者有多个直线和曲线段组成的形状等。
主要用到的该类的属性包括

moveToPoint:  //设置起始点
addLineToPoint:  //从上一点连接一条线到本次指定的点
closePath()  //闭合路径,把起始点和终点连接起来
appendPath:  //多条路径合并
removeAllPoints()  //删除所有点和线 lineWidth //路径宽度 lineCapStyle //端点样式(枚举) lineJoinStyle //连接点样式(枚举) //下面这几个属性要用在UIView中重写drawRect:方法中使用才有效,否则不会出现效果 UIColor.redColor().setStroke() //设置路径颜色(不常用) stroke()渲染路径 UIColor.redColor().setFill() //设置填充颜色(不常用) fill()渲染填充部分 注:再次声明mainPath.stroke() 不是去连线的,而是在渲染路径

画直线

let mainPath = UIBezierPath()
mainPath.moveToPoint(CGPointMake(40, 0)) //开始绘制,表示这个点是起点
mainPath.addLineToPoint(CGPointMake(40, 100)) mainPath.removeAllPoints() //删除所有点和线

画圆弧(兼职画圆)

/*参数解释:1.center: CGPoint  中心点坐标2.radius: CGFloat  半径3.startAngle: CGFloat 起始点所在弧度4.endAngle: CGFloat   结束点所在弧度5.clockwise: Bool     是否顺时针绘制7.画圆时,没有坐标这个概念,根据弧度来定位起始点和结束点位置。M_PI即是圆周率。画半圆即(0,M_PI),代表0到180度。全圆则是(0,M_PI*2),代表0到360度
*/
let mainPath1 = UIBezierPath(arcCenter: CGPoint(x: 50, y: 50), radius: 50, startAngle: CGFloat(M_PI) * 0, endAngle: CGFloat(M_PI) * 2, clockwise: true)

除了直接初始化一个圆弧,也可以增加一段圆弧路径(mainPath1.addCurveToPoint:)

初始化时画圆

let mainPath2 = UIBezierPath(ovalInRect: CGRect(origin: CGPoint(x: 50, y: 50), size: CGSize(width: 30, height: 30)))

画赛贝尔曲线
贝塞尔线是用于主要用于绘制路径及帧动画,我们简单的看下用法,不做深究
详细资料:http://www.cnblogs.com/jay-dong/archive/2012/09/26/2704188.html

//二阶贝塞尔曲线
let mainPath3 = UIBezierPath()
mainPath3.moveToPoint(CGPointMake(0, 0))
mainPath3.addQuadCurveToPoint(CGPoint(x: 40, y: 0), controlPoint: CGPoint(x: 20, y:50)) //三阶贝塞尔曲线 let mainPath4 = UIBezierPath() mainPath4.moveToPoint(CGPointMake(0, 0)) mainPath4.addCurveToPoint(CGPoint(x: 120, y: 0), controlPoint1: CGPoint(x: 40, y: 80), controlPoint2: CGPoint(x: 80, y: -80))

三角形

let mainPath5 = UIBezierPath()
mainPath5.moveToPoint(CGPointMake(40, 0))
mainPath5.addLineToPoint(CGPointMake(0, 40)) mainPath5.addLineToPoint(CGPointMake(80, 40)) mainPath5.closePath() //闭合路径,连线结束后会把起点和终点连起来

矩形

//实例化时建立矩形
let mainPath6 = UIBezierPath(rect: CGRect(x: 0, y: 0, width: 40, height: 60)) //实例化带圆角矩形 let mainPath7 = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: 40, height: 40), cornerRadius: 10) //实例化单角圆弧矩形 let mainPath8 = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: 40, height: 40), byRoundingCorners: UIRectCorner.TopLeft, cornerRadii: CGSize(width: 10, height: 10)) //用路径方法画正方形 let mainPath9 = UIBezierPath() mainPath9.moveToPoint(CGPointMake(0, 0)) mainPath9.addLineToPoint(CGPointMake(80, 0)) mainPath9.addLineToPoint(CGPointMake(80, 80)) mainPath9.addLineToPoint(CGPointMake(0, 80)) mainPath9.closePath() //和三角形一样需要闭合起点和终点 UIColor.redColor().setFill() //设置填充色 mainPath9.fill()

//多条路径合并

let mainPath10 = UIBezierPath()
mainPath10.moveToPoint(CGPointMake(0, 0))
mainPath10.addLineToPoint(CGPointMake(0, 80)) let mainPath11 = UIBezierPath() mainPath11.moveToPoint(CGPointMake(0, 80)) mainPath11.addLineToPoint(CGPointMake(40, 40)) mainPath10.appendPath(mainPath11)//多条路径合并

//CAShapeLayer,可以看做一个动画容器。把UIBezierPath绘制的路径放进去,点就会沿着这路径前进,加上颜色、动画等渲染后显示在界面上

let shapeLayer = CAShapeLayer()
shapeLayer.path = mainPath11.CGPath //存入UIBezierPath的路径
shapeLayer.fillColor = UIColor.clearColor().CGColor //设置填充色 shapeLayer.lineWidth = 2 //设置路径线的宽度 shapeLayer.strokeColor = UIColor.grayColor().CGColor //路径颜色 //如果想变为虚线设置这个属性,[实线宽度,虚线宽度],若两宽度相等可以简写为[宽度] shapeLayer.lineDashPattern = [2] //一般可以填"path" "strokeStart" "strokeEnd" 具体还需研究 let baseAnimation = CABasicAnimation(keyPath: "strokeEnd") baseAnimation.duration = 2 //持续时间 baseAnimation.fromValue = 0 //开始值 baseAnimation.toValue = 2 //结束值 baseAnimation.repeatDuration = 5 //重复次数 shapeLayer.addAnimation(baseAnimation, forKey: nil) //给ShapeLayer添 //显示在界面上 self.view.layer.addSublayer(shapeLayer)

func creatUI(){

let border: CAShapeLayer = CAShapeLayer()

//线的颜色

border.strokeColor = UIColor.redColor().CGColor

//设置填充色

border.fillColor = UIColor.darkGrayColor().CGColor

//虚线大小

border.lineDashPattern = [3,3]

//添加到layer

self.lineView.layer.addSublayer(border)

self.lineView.backgroundColor = UIColor.yellowColor()

self.view.addSubview(self.lineView)

self.lineView.frame = CGRectMake(100, 100, 100, 100)

/*加圆角虚线

roundedRect 这个虚线的frame

cornerRadius 切圆的大小  如果为0 则是一条虚线

*/

//添加路径1

//        border.path = UIBezierPath(roundedRect: CGRectMake(100, 100, 100,100), cornerRadius: 10).CGPath

/*给四个角的某一个角加圆角

roundedRect 这个虚线的frame

byRoundingCorners 那个角要变圆角

cornerRadius 切圆的大小  如果为0 则是一条虚线

*/

//添加路径2

//        border.path = UIBezierPath(roundedRect: CGRectMake(0, 0, 100, 100), byRoundingCorners:(UIRectCorner.TopLeft), cornerRadii: CGSizeMake(30, 40)).CGPath

//画一条虚线

// 创建path

let path = UIBezierPath()

// 添加路径[1条点(100,100)到点(200,100)的线段]到path

path.moveToPoint(CGPointMake(100, 100))

path.addLineToPoint(CGPointMake(200, 100))

//添加路径3

border.path = path.CGPath

//mark-请顺序打开和注释添加路径123  以显示不同的效果

}

PS:苹果官网API - UIBezierPath

转载于:https://www.cnblogs.com/gongyuhonglou/p/10311542.html

Swift - UIBezierPath相关推荐

  1. UIBezierPath和CAShapeLayer创建不规则View(Swift 3.0)

    最近一个朋友在做图片处理的 App,想要实现类似 MOLDIV App 拼图的UI效果(如何创建不规则的 view),就问我有什么想法.我首先想到的就是 UIBezierPath+CAShapeLay ...

  2. Swift-贝赛尔曲线画扇形、弧线、圆形、多边形——UIBezierPath实现App下载时的动画效果

    上篇文章提到了使用贝赛尔曲线实现画图板(传送门),顿时就对贝赛尔曲线兴趣大增有木有. 之所以接触贝赛尔曲线,多亏了师父.周五下班前师父给我留了个任务,让我周末回家研究研究 iPhone 手机下载 Ap ...

  3. Swift 3.0 预告:将 Objc 库转换成更符合 Swift 语法风格的形式

    转自:swiftcafe Swift 3.0 更新越来越临近,这次更新会给我们带来很多实用的内容,比如对 Objc 库的迁移,会更符合 Swift 的语法风格.用过之前版本的 Swift,我们会发现很 ...

  4. 如何用Swift实现一个好玩的弹性动画

    本文由CocoaChina译者浅夏@旧时光翻译自Raywenderlich 原文:How To Create an Elastic Animation with Swift 每个像样的iOS应用程序一 ...

  5. UIBezierPath路径绘图

    UIBezierPath路径绘图 一.新建一个playground 二.新建一个类继承与UIView 三.重写类中的drawRect()方法 四.定义坐标点(我们这里定义五个点,打算绘制一个五角星) ...

  6. Swift与Objective-C API交互

    Swift和Objective-C可以进行互操作,也就是说可以在Objective-C项目中使用Swift代码,反过来也可以.当然,这种互操作之间最重要的是可以在Swift中调用Objective-C ...

  7. swift:打造你自己的折线图

    看到苹果Health里的折线图了吗.我们就是要打造一个这样的折线图.没看过的请看下图. 我们的主题在于折线图本身.其他的包括步数.日平均值等描述类的内容这里就不涉及了. 首先观察,这个图种包含些什么组 ...

  8. 如何用 Swift 语言构建一个自定控件

    本文译自:How To Make a Custom Control in Swift 用户界面控件是所有应用程序重要的组成部分之一.它们以图形组件的方式呈现给用户,用户可以通过它们与应用程序进行交互. ...

  9. Swift 2.3- 3.0

    2019独角兽企业重金招聘Python工程师标准>>> 是否从Swift2.3升级到3.0呢? 如果你有一个意义非常重大的Swift编码库(就像我们在VTS中做的一样),那么别犹豫了 ...

最新文章

  1. php输出网络连接,如何打开php文件和输出内容
  2. Spring Boot实现热部署
  3. .net core项目实战之开发环境搭建
  4. 简单易懂的 pwnable.kr 第一题[fd]Writeupt
  5. TCP的拥塞控制--慢启动,拥塞避免,快重传,快速恢复
  6. 来自山西机器人乐队_格力:中国第一支工业机器人乐队重磅亮相
  7. Python 多线程总结
  8. python之三元表达式嵌套三元表达式解析
  9. JAVA中的枚举使用总结
  10. c++程序设计语言第四版pdf_寒假攻略 | 开启C语言自学模式
  11. 软考中级网络工程师真题资料
  12. Python WXPY实现微信监控报警功能的代码
  13. C# 使用OpenXML创建PPT表格
  14. 【解决】maven install出现fatal error compiling
  15. 端到端语音识别 ESPnet ASR脚本流程(asr.sh)
  16. 随笔---为什么一到选课时教务系统就卡顿甚至登不上去
  17. Java 笔试强训 牛客网选择编程题 02
  18. dad my_【玩转英文绘本】My Dad!《我爸爸》
  19. 大脑构造图与功能解析_【大脑结构图及功能图】_构造图_作用-大众养生网
  20. BCB vs. VC++

热门文章

  1. 解决gvim中php函数提示php_funclist.dict无法生效的问题
  2. 1467: C语言实验题――两个数最大
  3. onSaveInstanceState() 和 onRestoreInstanceState()
  4. leetcode:Excel Sheet Column Number
  5. failed to load kernel library!处理办法
  6. 如何选购显卡2011版
  7. 云服务器文件同步,Windows 8:本地文件与云服务器同步
  8. @scheduled 每30s 执行一次_荣耀30S正式发布:麒麟820 5G SoC/6400万像素AI四摄/40W超级快充...
  9. linux系统硬盘数量,Linux ext4文件系统划分磁盘inode数量
  10. java 字符界面 curses_[C++]Linux之图形界面编程库[curses库]之入门教程