我试图将画布视图覆盖在UIImageView
上以绘制一些自定义的线。
我正在尝试让画布自动布局约束取决于UIImageView
。但是它不起作用:当我在xcode布局调试器中调试时,UIImageView
的框架是一个大小为400 x 700的矩形,但是Canvas视图的框架大小为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
设置尺寸,则可以使用(请参阅末尾的注释)。但是我想使用自动布局锚来达到相同的效果。
答案 0 :(得分:1)
您需要设置
canvas.translatesAutoresizingMaskIntoConstraints = false