如何解决将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.3333
或0.5
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。