Может ли значение переменной в @IBDesignable зависеть от внешних значений, таких как фрейм представления?

Я хочу нарисовать отверстие формы в представлении @IBDesignable. Для этого мне нужен размер представления, который находится выше в иерархии представлений. Это представление меняет свой размер по ограничениям.

Как получить кадр? Может ли это вообще быть невозможным, потому что вид, от которого мы зависим, вырисовывается позже? Но это размер кадра может быть восстановлен рано?

<MainView>
   |  <View>
   |  |  <ViewWithShape>
   |  <ViewWeDependOn>

Форма рисуется в layoutSubviews:

   override func layoutSubviews() {
      super.layoutSubviews()
      if !(holeLayer != nil) {

         holeLayer = CAShapeLayer()
         layer.mask = holeLayer

         let rect = bounds // I need the frame HERE
         let path = UIBezierPath(quadrantHoleInsideRect: rect)

         holeLayer.path = path.CGPath
      }
   }

1 ответ

Я поставил этот вопрос, потому что моим первым очевидным решением было бы выход в зависимое представление из представления @IBDesignable.

Сначала это дало сбой, но теперь оно работает, как и ожидалось.

Другие вопросы по тегам