Дочернее представление остается видимым после установки непрозрачности на 0 в суперпредставлении - PullRequest
0 голосов
/ 28 мая 2018

Я реализую панель инструментов для приложения MacOS, и одной из функций является перетаскивание панелей для изменения их порядка.В моем коде перетаскиваемая панель альфа установлена ​​на 0 при начале перетаскивания, а ее снимок перетаскивается мышью.

Проблема в том, что установка альфа в 0 на виде панели не влияет на заголовок панели, он все еще виден и отображается над перетаскиваемым видом.Кроме того, проблема исчезает после переупорядочения представлений в стеке - заголовок тоже становится невидимым в следующий раз, когда я перетаскиваю панель.

Вы можете увидеть мою проблему на этом gif:

gif

Этот код используется при начале перетаскивания панели:

private func panelDragStarted(_ gr: NSPanGestureRecognizer) {
        draggedRealView = gr.view!.superview!
        draggedFakeView = createFakeView(for: draggedRealView)
        draggedFakeView.frame = NSRect(origin: draggedRealView.frame.origin, size: draggedRealView.frame.size)
        stack.addSubview(draggedFakeView)
        draggedRealView.alphaValue = 0
    }

Добавление этой строки в конце решает мою проблему: gr.view!.alphaValue = 0, но не очевидно, почему я должен изменить заголовок альфа вручную - это панельподпредставление и должны быть затронуты путем установки нулевой альфа на панели.

1 Ответ

0 голосов
/ 29 мая 2018

Разница между первой попыткой перетаскивания и другими состояла в том, чтобы установить для свойства stack.wantsLayer значение true в момент переупорядочения стека подпредставлений.Поэтому я просто переместил stack.wantsLayer = true во время инициализации, и теперь оно работает нормально.

...