Проблемы маскировки моего UIView с определенным CGRect - PullRequest
0 голосов
/ 08 мая 2019

Я хочу замаскировать мой вид в центре, когда я сканирую штрих-код, я хочу, чтобы прямоугольник (CGRect) был прозрачным, а фоновый вид - черным и слегка размытым. Читая другие посты, мне удалось собрать некоторый код, который должен работать, но я думаю, что проблема в том, что он не инвертирует маску в строке maskLayer.fillRule = .evenOdd, поскольку визуальный результат не меняется, даже если я удаляю эту строку код.

    var captureSession: AVCaptureSession!
    var previewLayer: AVCaptureVideoPreviewLayer!

...

    previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
    previewLayer.frame = view.layer.bounds
    previewLayer.videoGravity = .resizeAspectFill
    view.layer.addSublayer(previewLayer)

    let opaqueView = UIView()
    opaqueView.frame = view.layer.bounds
    opaqueView.backgroundColor = 
    UIColor.black.withAlphaComponent(0.7)
    view.addSubview(opaqueView)


    let maskLayer = CAShapeLayer()


    maskLayer.path =  UIBezierPath(roundedRect: CGRect(x: self.view.frame.width * 0.10, y: self.view.frame.height * 0.28, width: self.view.frame.width * 0.8, height: self.view.frame.height * 0.44), cornerRadius: self.view.frame.height * 0.01).cgPath

    maskLayer.backgroundColor = UIColor.black.cgColor
    maskLayer.fillRule = .evenOdd //NOT WORKING
    opaqueView.layer.mask = maskLayer
    opaqueView.clipsToBounds = true

    captureSession.startRunning()
...