调用draw()函数时我会使用什么参数?

问题描述 投票:0回答:1

我想在swift中以编程方式绘制一行。我有它的工作代码(我认为),但调用该函数需要一个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()
    }
}

现在从主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")
}
swift line draw
1个回答
2
投票

不要自己打电话给draw(rect:。永远不会做。

在视图初始化之后,它被框架隐式调用一次。

如果要重新绘制视图,请在视图上调用setNeedsDisplay()

© www.soinside.com 2019 - 2024. All rights reserved.