美文网首页iOSiOS 开发
iOS绘图之用UIKit框架绘制常见图形(Swift版)

iOS绘图之用UIKit框架绘制常见图形(Swift版)

作者: 201e7f3210f4 | 来源:发表于2016-05-07 14:55 被阅读661次

    本文首发在我的个人博客ghui.me欢迎指教

    使用UIKit实现自定义绘图主要是通过UIBezierPath这个类,它可以创建基于矢量的路径,和sketchps中的路径是同一个概念.对应Android中的Path这个类,实现的功能是一样的,但还是有些地方和Android中的使用不太一样,主要是因为iOS中没有CanvasPaint这两个类,第一次使用时有些不习惯,这里总结一下如何使用UIBezierPath绘制常见的图形.
    最终效果大致如下:

    1. 直线

    let pathLine = UIBezierPath()
    UIColor.blueColor().setStroke() //设置线条的颜色
    pathLine.lineWidth = 5
    pathLine.moveToPoint(CGPoint(x: 100, y: y))
    pathLine.addLineToPoint(CGPoint(x: 300, y: y))
    pathLine.lineCapStyle = .Round //线条结束点的形状
    pathLine.stroke() // 画线条
    

    2. 矩形

    最简单的方式是通过UIRectFill(只能绘制实心的矩形)

    UIColor.blackColor().setFill()
    UIRectFill(CGRect(x: 100, y: y, width: 150, height: 50))
    

    通过UIBezierPath可以控制是否实心及边框的颜色:

    let pathRect = UIBezierPath(rect: CGRect(x: 100, y: y, width: 50, height: 50))
    pathRect.lineWidth = 5
    UIColor.redColor().setStroke() //线条颜色
    pathRect.lineJoinStyle = .Round //连接点形状
    pathRect.stroke() //绘制边框
    UIColor.blueColor().setFill() //填充颜色
    pathRect.fill() //绘制填充内容
    

    绘制四个角都是圆角的矩形:

    let pathRect = UIBezierPath(roundedRect: CGRect(x: 10, y: y + 50, width: 100, height: 40), cornerRadius: 8.0)
    UIColor.blackColor().setFill()
    pathRect.fill()
    

    绘制部分角是圆角的矩形:

    let corners = UIRectCorner.TopLeft.union(UIRectCorner.BottomLeft)
    pathRect = UIBezierPath(roundedRect: CGRect(x: 10, y: y + 150, width: 100, height: 40) ,byRoundingCorners: corners, cornerRadii: CGSize(width: 10, height: 10))
    pathRect.stroke()
    

    3. 圆

    let pathCircle = UIBezierPath(ovalInRect: CGRect(x: 100, y: y, width: 50, height: 50))
    UIColor.greenColor().setFill()
    pathCircle.fill()
    pathCircle.lineWidth = 5
    UIColor.redColor().setStroke()
    pathCircle.stroke()
    

    具体是绘制正圆还是椭圆直接通过上面的 widthheight来控制,两者相等绘制出来就是正圆,否则就是椭圆.

    4. 多边形

    多边形的绘制主要依赖moveToPointaddLineToPoint这两个方法,通过不同的组合画出不同的图形

    let pathPg = UIBezierPath()
    pathPg.moveToPoint(CGPoint(x: 100, y: y))
    pathPg.addLineToPoint(CGPoint(x: 130, y: y + 120))
    pathPg.addLineToPoint(CGPoint(x: 200, y: y + 30))
    pathPg.addLineToPoint(CGPoint(x: 150, y: y + 40))
    UIColor.cyanColor().setFill()
    pathPg.fill()
    

    5. 圆弧

    普通的弧线

    UIColor.blackColor().setStroke()
    let pathArc = UIBezierPath(arcCenter: CGPoint(x: 120, y: y), radius: 40, startAngle: 0.0, endAngle: CGFloat(120 * M_PI / 180) , clockwise: true)
    pathArc.lineWidth = 3
    pathArc.stroke()
    

    或者

    let pathArc2 = UIBezierPath()
    pathArc2.addArcWithCenter(CGPoint(x: 240, y: y), radius: 40, startAngle: 0.0, endAngle: CGFloat(160 * M_PI / 180), clockwise: true)
    pathArc2.lineWidth = 3
    pathArc2.stroke()
    

    如果要想绘制扇形,只需要在上面的基础上再画一条到圆弧中心点的线即可.

    6. 曲线

    UIBezierPath提供了两种绘制曲线的方法:addQuadCurveToPointaddCurveToPoint, 前者是绘制二次贝塞尔曲线后者绘制三次贝塞尔曲线,一般这两种就可以满足绘制曲线的需求的,所以UIBezierPath也没提供更高阶的曲线绘制的方法:
    二次贝塞尔曲线(一个控制点P1)

    相关文章

      网友评论

        本文标题:iOS绘图之用UIKit框架绘制常见图形(Swift版)

        本文链接:https://www.haomeiwen.com/subject/cbtsrttx.html