1) NSOpenGLView может иметь подпредставление. Это может быть много даже.
2) Причина, по которой некоторые представления, элементы управления и другие элементы подвергаются запугиванию со стороны NSOpenGLView, связана с процессом загрузки при запуске приложения. Т.е. если вы добавите ползунок или текстовое поле выше и в представление содержимого окна, где также находится NSOpenGLView, при запуске приложения это текстовое поле, скорее всего, окажется под NSOpenGLView.
Это ошибка Apple. И они знают об этом.
Вы можете решить это довольно легко, даже не добавляя подпредставление для NSOpenGLView ...
В Интерфейсном Разработчике перетащите то есть CustomView на холст (не вид). И установите его так, как вы хотите, с помощью ползунков, текста, а что нет. Затем создайте выход (назовите его, т.е. topView) в вашем контроллере представления. Тогда где-нибудь в вашем коде ... Возможно (applicationDidFinishLaunching) добавить эту строку ...
[_ window.contentView addSubview: _topView];
(Есть ли ваше расположение и макет)
Это будет делать то же самое, как если бы вы перетаскивали его в contentView внутри IB. Только это привлечет проклятую вещь в правильное положение Z.
Таким образом, вы теряете ограничения IB и должны это делать вручную
Можно также просто создать подкласс и CAOpenGLLayer и использовать его в качестве вспомогательного слоя внутри обычного NSView. Там тоже нарисовано правильно ...
Вот способ, которым Apple хочет это сделать. Cayers - находка;)
Введите следующую строку ** NSOpenGLLayer ** в поиске и нажмите Enter, чтобы добраться до места, где оно находится ...
NSOpenGLLayer
Надеюсь, это поможет ....