NSOpenGLView в NSScrollView?

У меня есть метод масштабирования для моего NSOpenGLView. Если изображение увеличено, размер кадра NSOpenGLView, порт просмотра и т. Д. Увеличивается. То же самое происходит, если NSOpenGLView уменьшается (размер кадра, порт просмотра и т. Д. Уменьшается). Поэтому мне нужно, чтобы при увеличении изображения, чтобы NSOpenGLView был больше моего окна, должна появиться полоса прокрутки. Поэтому я подумал, что размещение NSOpenGLView в NSScrollView будет моим решением. Но это не так. Это не работает Как тогда я мог это сделать?

1 ответ

Когда вы поместили NSOpenGLView в NSScrollView в Интерфейсном Разработчике, вы должны переопределить методы вашего пользовательского представления:

  • - (void)awakeFromNib - здесь есть OpenGL и другие инициализации.
  • - (void)drawRect: (NSRect) dirtyRect - здесь рендеринг.
  • - (void)setFrame:(NSRect)frame - вот реакция на изменение размера кадра.

В качестве области просмотра используйте размер visibleRect:

glViewport(0,
           0,
           self.visibleRect.size.width,
           self.visibleRect.size.height);

Если ваш вид мигает, переопределите метод resizeWithOldSuperviewSize тоже:

- (void)resizeWithOldSuperviewSize:(NSSize)oldSize {
};

Но это взлом, и было бы лучше сделать пользовательскую реализацию представления Clip, если он используется.

Если вы хотите увеличить свой OpenGL вид, просто измените размер его кадра.

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