Очистить цвет фона для UIBezierPath и заливки

#ios #swift #core-graphics #uibezierpath

#iOS #swift #ядро-графика #uibezierpath

Вопрос:

Я хочу иметь представление, которое внизу имеет кривую.

Я создал это ArchView , которое отлично справляется с задачей, за исключением одной вещи: синяя часть, я хочу, чтобы она была прозрачной.

введите описание изображения здесь

Если я установлю цвет фона так, как .clear это произойдет:

введите описание изображения здесь

Это код для ArchView :

 class ArchedView: UIView {
    let archHeight: CGFloat
    let bColor: UIColor
    let archColor: UIColor
    let contentView: UIView = UIView()

    init(archHeight: CGFloat, bColor: UIColor, archColor: UIColor) {
        self.archHeight = archHeight
        self.bColor = bColor
        self.archColor = archColor
        super.init(frame: .zero)
        backgroundColor = .clear
        addSubview(contentView)

        contentView.backgroundColor = bColor
        contentView.snp.makeConstraints { (make) in
            make.top.left.right.equalToSuperview()
            make.bottom.equalToSuperview().offset(-archHeight)
        }
    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override func draw(_ rect: CGRect) {
        let height: CGFloat = archHeight
        let ovalRect = CGRect(x: 0, y: 0, width: frame.width, height: height)
        let ovalPath = UIBezierPath()
        ovalPath.addArc(withCenter: CGPoint(x: 0, y: 0), radius: (ovalRect.width / 2) * 1.3, startAngle: 180 * .pi/180, endAngle: 0 * .pi/180, clockwise: false)
        ovalPath.addLine(to: CGPoint.zero)

        ovalPath.close()

        var ovalTransform = CGAffineTransform(translationX: ovalRect.midX, y: frame.height - height)
        ovalTransform = ovalTransform.scaledBy(x: 1, y: height / ovalPath.bounds.height)
        ovalPath.apply(ovalTransform)

        archColor.setFill()
        ovalPath.fill()
    }
}

  

Я предполагаю, что это как-то связано с fill() , но я не могу понять, что здесь происходит.

Комментарии:

1. Проверьте свой вид.цвет фона

2. @ReinierMelian Я не уверен, что понимаю вас, какой вид.цвет фона? Это UIView, а не UIViewController.

3. ваш цвет фона понятен, backgroundColor = .clear

4. Почему бы вместо этого не использовать слой маски?