我正在尝试在
UIImageView
绘制一些自定义线条。
我试图让画布自动布局约束依赖于
UIIVIEVIEW
. 但它不起作用:当我在Xcode布局调试器中调试时,
UIIVIEVIEW
是一个大小为400 x 700的矩形,但画布视图框架大小为0x0。
代码相对简单:
class Canvas : UIView {
override func draw(_ rect: CGRect) {
super.draw(rect)
guard let context = UIGraphicsGetCurrentContext() else { return }
let startPoint = CGPoint(x: 0, y: 0)
let endPoint = CGPoint(x:100 , y: 100)
context.setStrokeColor(UIColor.red.cgColor)
context.setLineWidth(7)
context.move(to: startPoint)
context.addLine(to: endPoint)
context.strokePath()
}
}
class ViewController: UIViewController {
let canvas:Canvas = {
let canvas = Canvas()
canvas.backgroundColor = UIColor.black
canvas.alpha = 0.2
return canvas
} ()
let photoView: UIImageView = {
let imageView = UIImageView()
imageView.image = UIImage(imageLiteralResourceName: "hongjinbao")
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.contentMode = .scaleAspectFill
return imageView
} ()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// stack views
view.addSubview(photoView)
view.addSubview(canvas)
setupLayout()
}
private func setupLayout() {
photoView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
photoView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
photoView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
photoView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
canvas.topAnchor.constraint(equalTo: photoView.topAnchor).isActive = true
canvas.bottomAnchor.constraint(equalTo: photoView.bottomAnchor).isActive = true
canvas.leadingAnchor.constraint(equalTo: photoView.leadingAnchor).isActive = true
canvas.trailingAnchor.constraint(equalTo: photoView.trailingAnchor).isActive = true
// this two works together
// photoView.frame = view.frame
// canvas.frame = photoView.frame
}
}
我错过什么了吗?如果我用
.frame
它起作用(见结尾处的注释)。但我想使用自动布局锚来实现相同的效果。