Какой аргумент я использую при вызове функции draw ()? - PullRequest
0 голосов
/ 10 апреля 2019

Я хочу нарисовать линию программно в 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 не используется в функции, поэтому я даже не уверен в ее назначении.

UPDATE В основном я создаю объект следующим образом:

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")
}

1 Ответ

2 голосов
/ 10 апреля 2019

Не звоните draw(rect: сами. Никогда до.

Он неявно вызывается платформой после инициализации представления.

Если вы хотите перерисовать представление, вызовите setNeedsDisplay() в представлении.

...