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

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

画直线

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

画圆弧(兼职画圆)

  1. /*
  2. 参数解释:
  3. 1.center: CGPoint 中心点坐标
  4. 2.radius: CGFloat 半径
  5. 3.startAngle: CGFloat 起始点所在弧度
  6. 4.endAngle: CGFloat 结束点所在弧度
  7. 5.clockwise: Bool 是否顺时针绘制
  8. 7.画圆时,没有坐标这个概念,根据弧度来定位起始点和结束点位置。M_PI即是圆周率。画半圆即(0,M_PI),代表0到180度。全圆则是(0,M_PI*2),代表0到360度
  9. */
  10. 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:)

初始化时画圆

  1. 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

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

三角形

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

矩形

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

//多条路径合并

  1. let mainPath10 = UIBezierPath()
  2. mainPath10.moveToPoint(CGPointMake(0, 0))
  3. mainPath10.addLineToPoint(CGPointMake(0, 80))
  4. let mainPath11 = UIBezierPath()
  5. mainPath11.moveToPoint(CGPointMake(0, 80))
  6. mainPath11.addLineToPoint(CGPointMake(40, 40))
  7. mainPath10.appendPath(mainPath11)//多条路径合并

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

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

Swift - UIBezierPath的更多相关文章

  1. Swift之UIBezierPath

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

  2. Swift用UIBezierPath来画圆角矩形、自定义多路径图形

    最好的特点就是可以自定义路径,设置圆角和描边都很方便,以下为代码和效果,均在playground中实现 1.首先实现一个圆角矩形,并对此路径描边,为其绘制一个轮廓. 1 2 3 4 5 6 7 8 9 ...

  3. Swift - LineChart绘制折线图

    LineChart,就使用Core Graphics和QuartzCore框架中的CAShapeLayer绘制.这样执行效率明显比堆砌UIView的方法效率高--占用资源少,执行快. 看看CALaye ...

  4. Swift: 深入理解Core Animation(一)

    如果想在底层做一些改变,想实现一些特别的动画,这时除了学习Core Animation之外,别无选择. 最近在看<iOS Core Animation:Advanced Techniques&g ...

  5. [翻译]使用Swift在Xcode中创建自定义控件

    使用Swift在Xcode中创建自定义控件 原文 IBDesignable and IBInspectable With IBDesignable and IBInspectable, develop ...

  6. iOS复杂动画之抽丝剥茧(Objective-C & Swift)

    一.前言 随着开发者的增多和时间的累积,AppStore已经有非常多的应用了,每年都有很多新的APP产生.但是我们手机上留存的应用有限,所以如何吸引用户,成为产品设计的一项重要内容.其中炫酷的动画效果 ...

  7. iOS开发——图形编程Swift篇&CAShapeLayer实现圆形图片加载动画

    CAShapeLayer实现圆形图片加载动画 几个星期之前,Michael Villar在Motion试验中创建一个非常有趣的加载动画. 下面的GIF图片展示这个加载动画,它将一个圆形进度指示器和圆形 ...

  8. Swift—Core Foundation框架-备

    Core Foundation框架是苹果公司提供一套概念来源于Foundation框架,编程接口面向C语言风格的API.虽然在Swift中调用这种C语言风格的API比较麻烦,但是在OS X和iOS开发 ...

  9. Swift中的UIKit重力学

    前言: 重力学这个名词不论在哪个行业领域听起来似乎都非常高大上. 那么在Swift中的重力学是什么呢?那就是将我们移动端屏幕上毫无生命力的东西也置于万有引力中.使它们能够展现出好像真的因为引力而向下坠 ...

随机推荐

  1. noip2012 开车旅行

    此题100分的解法就是先预处理出每个点的下一个点之后倍增就好了.其实并没有太大难度. pbihao用双向链表写过了此题.在本地上我treap狂操他,but在rqnoj上,我依靠反复提交才A掉此题(最后 ...

  2. DPM模型简单记录

    这个模型思想很直观(有误),但是写的源码太难懂了(看的是release-3的版本,最接近Object Detection with Discriminatively Trained Part Base ...

  3. Adapt适配器

    为接口提供所有的空实现,让使用者仅仅覆盖需要的部分: 本思想肯定有问题,慢慢考究 frame.addWindowListener(new WindowAdapter() { @Override pub ...

  4. jquery 返回顶部 兼容web移动

    返回顶部图片 http://hovertree.com/texiao/mobile/6/tophovertree.gif 具体实现代码 <span id="tophovertree&q ...

  5. linux 远程连接工具——MTPuTTY

    简介 MTPUTTY是一个非常流行的ssh客户端. 安装 官网地址:http://www.ttyplus.com/multi-tabbed-putty/ 下载并安装,运行软件,如图 添加服务器 结语 ...

  6. 使用Cocos2d-x实现微信“天天爱消除”炫耀button特效

    引言Cocos2d-x引擎中有很多Action,这样可以方便的让开发者调用相应的Action去完成一些动作,例如:移动,弹跳,淡入淡出等.可在实际的开发过程中,由于游戏的需要,显然地,引擎自带的Act ...

  7. 决策树-ID3

    id3:无法直接处理数值型数据,可以通过量化方法将数值型数据处理成标称型数据,但涉及太多特征划分,不建议 决策树:的最大优点在于可以给出数据的内在含义,数据形式非常容易理解: 决策树介绍:决策树分类器 ...

  8. Python员工信息表练习

    1.用户可以模糊查询员工信息 2.显示匹配了多少条,匹配字符需要高亮显示 employee_db.txt 总经办 龚丽丽 总经理 男 -- 1月18日 汉 族 中共党员 已婚 总经办 李惠 副总经理 ...

  9. 移动端浏览器body的overflow:hidden并没有什么作用

    今天突然遇到一个问题,使用li模拟select,但是碰到一个很尴尬的问题,给body加了overflow:hidden,但是body并没有禁止滚动条,滚动条依旧顺滑. <!DOCTYPE htm ...

  10. 安装windows下的Cscope

    http://blog.csdn.net/maxiee/article/details/10034263 Cscope 是一款用于查看大型工程中的代码的软件.它使用方便,支持快速查找 C Symbol ...