#swift #subclass #uibezierpath #addsubview
#swift #подкласс #uibezierpath #добавить subview
Вопрос:
Цель моего кода swifts — нарисовать линию, представляющую обе оси x и y, как вы могли бы видеть на графике. У меня есть код, который я использовал для создания графика, но я не знаю, как подключиться к классам view controller. Я думаю, что мне нужно создать объект в контроллере представления и подклассировать его другими классами, в этом случае это была бы строка класса. Я просто подумал, что мой приведенный ниже код будет работать, но ничего не отображается.
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()
}
}
Ответ №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()
}
}
Примечание: lineWidth
of 0.1
— это действительно тонкая линия и может быть не очень заметна. Линия с одной точкой — это 1
, а линия с одним пикселем была бы 0.3333
или 0.5
на современных iPhone.