将 uibezierpath 与另一个连接 class

connect uibezierpath with a another class

我的 swifts 代码目标是绘制一条代表它们的 x 和 y 轴线的线,就像您在图表中看到的那样。我有用于创建图表的代码,但我不知道如何连接到视图控制器 classes。我想我必须在视图控制器中创建一个对象,然后将它与另一个 class 子 class 合并,在这种情况下将是 class 行。我只是认为我下面的代码可以工作,但什么也没有出现。

import UIKit

class ViewController: UIViewController{
    var box = Line()
    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(box)
        box.drawLine()
        
    }

 
}

class Line:UIView {
    
    var line =  UIBezierPath()
    var line2 =  UIBezierPath()
    
    func drawLine() {
        line.move(to: CGPoint(x: 0, y: bounds.height / 2))
        line.addLine(to: CGPoint(x: (bounds.width) , y: bounds.height / 2))
        UIColor.black.setStroke()
        line.lineWidth = 0.1
        line.stroke()
        
        line2.move(to: CGPoint(x: bounds.width / 2, y:0 ))
        line2.addLine(to: CGPoint(x:  (bounds.width / 2) , y: (bounds.height)  ))
        
        
        
        UIColor.black.setStroke()
        line2.lineWidth = 0.1
        line2.stroke()
        
        
        
    }
    
    override func draw(_ rect: CGRect) {
        drawLine()
    }
}

两件事:你需要给你的盒子一个frame(或者给它一些限制来设置它的大小),你需要给它一个backgroundColor,否则它只会黑色.

override func viewDidLoad() {
    super.viewDidLoad()

    let box = Line(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
    box.backgroundColor = .white
    view.addSubview(box)
}

注意:不必显式调用drawLine,因为draw(rect:)会在视图出现时被系统调用

另外,你只需要一个UIBezierPath:

class Line:UIView {
    
    func drawLine() {
        let line =  UIBezierPath()
        
        line.move(to: CGPoint(x: 0, y: bounds.height / 2))
        line.addLine(to: CGPoint(x: (bounds.width) , y: bounds.height / 2))

        line.move(to: CGPoint(x: bounds.width / 2, y:0 ))
        line.addLine(to: CGPoint(x:  (bounds.width / 2) , y: (bounds.height)  ))

        UIColor.black.setStroke()
        line.lineWidth = 0.1
        line.stroke()
    }
    
    override func draw(_ rect: CGRect) {
        drawLine()
    }
}

注意: 0.1lineWidth 是一条非常细的线,可能不是很明显。在当前的 iPhone 上,一点线是 1,一个像素线是 0.33330.5