swift - 调用 draw() 函数时使用什么参数?
问题描述
我想以编程方式快速画一条线。我有它的工作代码(我认为),但调用该函数需要一个CGRect
参数。而且我不确定在那里写什么代码。
draw() 类和函数如下所示:
class LineView : UIView {
override func draw(_ rect: CGRect) {
var aPath = UIBezierPath()
aPath.move(to: CGPoint(x:2, y:2))
aPath.addLine(to: CGPoint(x:6, y:6))
aPath.close()
}
}
现在从 main 调用它ViewDidLoad
看起来像这样:
var line = LineView()
line.draw(MISSING ARGUMENT)
但我不知道我应该通过什么论点。函数中没有CGRect
使用任何东西,所以我什至不确定它的用途。
更新 主要我创建这样的对象:
class ViewController: UIViewController {
@IBOutlet weak var gameBoard: UIView!
override func viewDidLoad() {
super.viewDidLoad()
var line = LineView()
gameBoard.addSubview(line)
}
}
我的绘图类看起来像这样:
import UIKit
class LineView : UIView {
override init(frame: CGRect) {
super.init(frame: frame) //super = DO REGULAR INIT STUFF FOR UIView
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func draw(_ rect: CGRect) {
var aPath = UIBezierPath()
aPath.move(to: CGPoint(x:2, y:2))
aPath.addLine(to: CGPoint(x:6, y:6))
aPath.close()
UIColor.red.set()
aPath.stroke()
aPath.fill()
setNeedsDisplay()
}
}
得到它的工作:
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
解决方案
不要给draw(rect:
自己打电话。永远不要。
它在视图初始化后被框架隐式调用一次。
如果要重绘视图setNeedsDisplay()
上的视图调用。
推荐阅读
- python - 抽象基类要求混凝土具有最少的类属性,但允许额外的
- python - 如何使用 OpenCV 和 Python 减少视频源中处理的帧数?
- python - 使用烧瓶棉花糖,我如何获得一个 JSON 字符串,该字符串除了引用实例的 id 之外还会返回一个值?
- python - Python pandas - 对行进行分组以求和整数
- python - sklearn 随机森林回归器在使用负权重训练时预测 -inf
- javascript - 没有页面重新加载的烧瓶表单提交
- python - 如何将特定子字符串分配给 Python 或 Pandas 中的列
- azure-devops - Terraform 中的动态块 - 不允许超过 1 个“dynamic_criteria”块
- python - Selenium for 循环打印每次相同的值
- python - 如何获取任何计算机的屏幕尺寸