我正在尝试在 UIImageView
之上覆盖 Canvas View 以绘制一些自定义线条。
我试图让 Canvas 自动布局约束依赖于 UIImageView
。但它不起作用:当我在 xcode 布局调试器中调试时,UIImageView
的框架是一个大小为 400 x 700 的矩形,但 Canvas View 框架大小为 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
设置大小,它就可以工作(请参阅末尾的评论)。但我想使用 Autolayout anchor 来实现相同的效果。
最佳答案
你需要设置
canvas.translatesAutoresizingMaskIntoConstraints = false
关于swift - 如何让自动布局约束依赖于兄弟 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54269901/