Swift - 在UIView上使用自定义曲线绘制复杂图形(贝塞尔曲线)
(本文代码已升级至Swift3)
UIBezierPath 类可以表示任何能够用 Bezier 曲线定义的形状,我们可以创建自己的自定义曲线。完成操作后,可以像其他路径一样,使用所得到的 UIBezierPath 对象进行填充和描边。
1,下面演示使用UIBezierPath绘制一个不规则图形:
(1)画笔移动到矩形区域左上角
(2)从笔的当前位置向右上角的点画一条直线
(3)从笔的当前位置向左下角的点画一条直线
(4)从笔的当前位置向右下角画一条曲线,曲线弯曲程度的两个控制点是矩形区域的中点
(5)从笔的当前位置向左上角的点绘制一条直线,使路径闭合
2,效果图如下:
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.clear } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func draw(_ rect: CGRect) { super.draw(rect) //创建一个矩形,它的所有边都内缩5% let drawingRect = self.bounds.insetBy(dx: self.bounds.size.width * 0.05, dy: self.bounds.size.height * 0.05) //确定组成绘画的点 let topLeft = CGPoint(x:drawingRect.minX, y: drawingRect.minY) let topRight = CGPoint(x:drawingRect.maxX, y:drawingRect.minY) let bottomRight = CGPoint(x:drawingRect.maxX, y:drawingRect.maxY) let bottomLeft = CGPoint(x:drawingRect.minX, y:drawingRect.maxY) let center = CGPoint(x:drawingRect.midX, y:drawingRect.midY) //创建一个贝塞尔路径 let bezierPath = UIBezierPath() //开始绘制 bezierPath.move(to: topLeft) bezierPath.addLine(to: topRight) bezierPath.addLine(to: bottomLeft) bezierPath.addCurve(to: bottomRight, controlPoint1: center, controlPoint2: center) //使路径闭合,结束绘制 bezierPath.close() //设定颜色,并绘制它们 UIColor.green.setFill() UIColor.black.setStroke() bezierPath.fill() bezierPath.stroke() } }
你好请问 你写的这些 有官方文档吗
随着时间的变化,y轴数据改变,的曲线怎么画