Создание пользовательского интерфейса с прозрачной областью

#uiview #swift3

#пользовательский интерфейс #swift3

Вопрос:

Я поместил обычный UIView в IB в свой UIViewController и установил представление в подкласс UIView с помощью следующего метода рисования:

 override func draw(_ rect: CGRect) {
    super.draw(rect)

    self.isOpaque = false
    self.backgroundColor?.setFill()
    UIRectFill(rect)
    let insetRect = self.bounds.insetBy(dx: 0, dy: 4)
    UIColor.clear.setFill()
    UIRectFill(insetRect)
}
  

Ожидаемым результатом должно быть то, что цвет фона (белый) отображается в виде строки сверху и снизу представления. Это действительно то, что происходит. Но я бы хотел, чтобы прямоугольник вставки был прозрачным, поэтому я установил цвет на прозрачный. Но вместо этого результат будет черным. Смотрите изображение.

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

Ответ №1:

Я нашел другой способ сделать это, подкласс UIView, и на этот раз я получаю ожидаемую прозрачность в середине:

 override init(frame: CGRect) {
    super.init(frame: frame)
    self.backgroundColor = UIColor.clear
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}



override func draw(_ rect: CGRect) {
    super.draw(rect)

    let top = UIBezierPath(rect: CGRect(x: 0, y: 0, width: self.bounds.width, height: 4))
    UIColor.white.setFill()
    top.fill()
    let bottom = UIBezierPath(rect: CGRect(x: 0, y: self.bounds.height - 4, width: self.bounds.width, height: 4))
    bottom.fill()
}