【问题标题】:connect uibezierpath with a another class将 uibezierpath 与另一个类连接
【发布时间】:2020-12-12 14:48:34
【问题描述】:

我的 swifts 代码目标是绘制一条线,表示它们的 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()
    }
}

【问题讨论】:

    标签: swift subclass uibezierpath addsubview


    【解决方案1】:

    两件事:你需要给你的盒子一个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()
        }
    }
    

    注意:lineWidth0.1 是一条非常细的线,可能不太明显。在当前的 iPhone 上,单点线是 1,单像素线是 0.33330.5

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 2017-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多