一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

ios开发之在UIView上使用自定义曲线绘制复杂图形(贝塞尔曲线)

时间:2015-11-18 编辑:简简单单 来源:一聚教程网

有时我们需要绘制一个不规则路径的图形,里面可能包含直线或者曲线,这时就可以使用 UIBezierPath 来实现。

 
UIBezierPath类可以表示任何能够用Bezier曲线定义的形状,我们可以创建自己的自定义曲线。完成操作后,可以像其他路径一样,使用所得到的UIBezierPath对象进行填充和描边。
 
1,下面演示使用UIBezierPath绘制一个不规则图形:
(1)画笔移动到矩形区域左上角
(2)从笔的当前位置向右上角的点画一条直线
(3)从笔的当前位置向左下角的点画一条直线
(4)从笔的当前位置向右下角画一条曲线,曲线弯曲程度的两个控制点是矩形区域的中点
(5)从笔的当前位置向左上角的点绘制一条直线,使路径闭合
 
2,效果图如下:
原文:Swift - 在UIView上使用自定义曲线绘制复杂图形(贝塞尔曲线)
 
3,代码如下:

 

 代码如下 复制代码
import UIKit
 
class ViewController: UIViewController {
 
    override func viewDidLoad() {
        super.viewDidLoad()
         
        let viewRect = CGRect(x: 50, y: 50, width: 100, height: 100)
        let view1 = MyCanvas(frame: viewRect)
        self.view.addSubview(view1)
    }
 
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
 
class MyCanvas: UIView {
    override init(frame: CGRect) {
        super.init(frame: frame)
        //把背景色设为透明
        self.backgroundColor = UIColor.clearColor()
    }
 
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
     
    override func drawRect(rect: CGRect) {
        let bezierPath = UIBezierPath()
         
        //创建一个矩形,它的所有边都内缩5%
        let drawingRect = CGRectInset(self.bounds,
            self.bounds.size.width * 0.05,
            self.bounds.size.height * 0.05)
   
        //确定组成绘画的点
        let topLeft = CGPointMake(CGRectGetMinX(drawingRect),
            CGRectGetMinY(drawingRect))
         
        let topRight = CGPointMake(CGRectGetMaxX(drawingRect),
            CGRectGetMinY(drawingRect))
         
        let bottomRight = CGPointMake(CGRectGetMaxX(drawingRect),
            CGRectGetMaxY(drawingRect))
         
        let bottomLeft = CGPointMake(CGRectGetMinX(drawingRect),
            CGRectGetMaxY(drawingRect))
         
        let center = CGPointMake(CGRectGetMidX(drawingRect),
            CGRectGetMidY(drawingRect))
         
        //开始绘制
        bezierPath.moveToPoint(topLeft)
        bezierPath.addLineToPoint(topRight)
        bezierPath.addLineToPoint(bottomLeft)
        bezierPath.addCurveToPoint(bottomRight, controlPoint1: center, controlPoint2: center)
         
        //使路径闭合,结束绘制
        bezierPath.closePath()
         
        //设定颜色,并绘制它们
        UIColor.greenColor().setFill()
        UIColor.blackColor().setStroke()
         
        bezierPath.fill()
        bezierPath.stroke()
    }
}

热门栏目