将uibezierpath与另一个类连接

问题描述

我的swift代码目标是画一条线,代表x和y轴线,就像在图形中看到的那样。我有用于创建图形的代码,但我不知道如何连接到视图控制器类。我要在视图控制器中创建一个对象,并用另一个类将其子类化,在这种情况下,将是类行。我只是以为下面的代码可以工作,但是什么也没出现。

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()
    }
}

注意lineWidth中的0.1太细了,可能看不到。在当前的iPhone上,一条点线是1,一条像素线是0.33330.5