将 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.1
的 lineWidth
是一条非常细的线,可能不是很明显。在当前的 iPhone 上,一点线是 1
,一个像素线是 0.3333
或 0.5
。
我的 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.1
的 lineWidth
是一条非常细的线,可能不是很明显。在当前的 iPhone 上,一点线是 1
,一个像素线是 0.3333
或 0.5
。