Как решить проблему нулевого значения Swift UIBlurEffect? - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь запустить код, созданный с помощью Swift 2.x, в Swift 5. После принятия всех автокоррекций я сталкиваюсь с ошибкой ниже в Simulator.

libMobileGestalt MobileGestalt. c : 890: MGIsDeviceOneOfType не поддерживается на этой платформе.

Вышеупомянутая ошибка была устранена после того, как я следил за Невозможно найти масштаб экрана и неожиданную физическую ориентацию экрана в Xcode 10 .

После того, как я щелкнул по экрану, отображается критическая ошибка, как показано ниже.

Неустранимая ошибка: неожиданно обнаружен ноль при неявном развертывании необязательного значения 2020-06-18 16: 54: 37.731504 + 0900 test [81264: 17199215] Неустранимая ошибка: неожиданно обнаружен ноль при неявном развертывании необязательного значения (lldb)

Ошибка связана с

updateBlurViewHole (точка: перемещенная_ точка, blurView: blurView)

Пропустил ли я какой-нибудь необходимый объект раскадровки? Я выполнил инструкцию в

//
//  ViewController.swift
//  test
//
//  Created by June Kang on 6/18/20.
//  Copyright © 2020 June Kang. All rights reserved.
//

import UIKit

class ViewController: UIViewController {
    @IBOutlet var blurView: UIVisualEffectView!
    let context = CIContext()


    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        //updateBlurViewHole()
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        //self.updateBlurViewHole(point)
    }

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
        var moved_point = CGPoint(x: 0, y: 0)
        for touch in touches {
            moved_point = touch.location(in: view)
        }
        updateBlurViewHole(point: moved_point, blurView: blurView)
    }

    func updateBlurViewHole(point: CGPoint, blurView: UIVisualEffectView) {

        let maskView = UIView(frame: blurView.bounds)
        maskView.clipsToBounds = true;
        maskView.backgroundColor = UIColor.clear

        let outerbezierPath = UIBezierPath.init(roundedRect: blurView.bounds, cornerRadius: 0)
        let rect = CGRect(x: point.x, y: point.y, width: 100, height: 100)
        let innerCirclepath = UIBezierPath.init(roundedRect:rect, cornerRadius:rect.height * 0.5)

        outerbezierPath.append(innerCirclepath)
        outerbezierPath.usesEvenOddFillRule = true



        let fillLayer = CAShapeLayer()
        fillLayer.fillRule = CAShapeLayerFillRule.evenOdd
        fillLayer.fillColor = UIColor.green.cgColor // any opaque color would work
        fillLayer.path = outerbezierPath.cgPath
        maskView.layer.addSublayer(fillLayer)
        blurView.mask = maskView;

    }
}
...