uiview - это подклассы, на которые не влияют запрограммированные ограничения - PullRequest
0 голосов
/ 25 октября 2019

Мой код ниже не отвечает на NSLayoutConstraint.activate ([ограничение в viewdidload. Код отображает холст в полноэкранном режиме. Я не знаю, что это заставляет это делать. Я не могу понять это. Nothining находится в раскадровке. Вы можете скопировать этот точный код в проект Xcode, в котором нет ничего раскадровки.

import UIKit

class ViewController: UIViewController {

let canvas = UIView()




override func viewDidLoad() {
    super.viewDidLoad()

    canvas.backgroundColor = .black


    view.addSubview(canvas)
    view.translatesAutoresizingMaskIntoConstraints = false

    NSLayoutConstraint.activate ([
               canvas.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :37.5),
               canvas.topAnchor.constraint(equalTo: view.centerYAnchor, constant : 225),
               canvas.widthAnchor.constraint(equalToConstant: 75),
               canvas.heightAnchor.constraint(equalToConstant: 50),
    ])


}


}


class Canvas: UIView {

// public function
func undo() {
    _ = lines.popLast()
    setNeedsDisplay()
}

func clear() {
    lines.removeAll()
    setNeedsDisplay()
}

fileprivate var lines = [[CGPoint]]()

override func draw(_ rect: CGRect) {
    super.draw(rect)

    guard let context = UIGraphicsGetCurrentContext() else { return }

    context.setStrokeColor(UIColor.red.cgColor)
    context.setLineWidth(10)
    context.setLineCap(.round
    )

    lines.forEach { (line) in
        for (i, p) in line.enumerated() {
            if i == 0 {
                context.move(to: p)
            } else {
                context.addLine(to: p)
            }
        }
    }

    context.strokePath()

}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    lines.append([CGPoint]())
}

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    guard let point = touches.first?.location(in: nil) else { return }
    guard var lastLine = lines.popLast() else { return }
    lastLine.append(point)
    lines.append(lastLine)
    setNeedsDisplay()
}

}
...