NSOpenGLView в NSScrollView?

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


person hockeyman    schedule 23.08.2012    source источник
comment
Есть много причин, по которым это может не сработать. Было бы лучше показать нам, как вы добавляете его в прокрутку и как вы изменяете размер. В противном случае мы не сможем вам помочь.   -  person sosborn    schedule 23.08.2012
comment
Я только что поместил NSOpenGLView в NSScrollView в InterfaceBuilder. Думал, может сработать. Но это не так. До сих пор я нашел некоторую информацию о том, что мне нужно установить размер моего nsscrollview documentView таким же, как размер nsopenglview. Но я до сих пор не нашел никакой информации, как это сделать. А как это не работает? Когда я прокручиваю, NSScrollView выглядит так, как будто он прокручивается, но NSOpenGLView остается на своем месте. Так что, может быть, мне нужно использовать glTranslatef всякий раз, когда перемещается полоса прокрутки nsscrollview?   -  person hockeyman    schedule 23.08.2012


Ответы (1)


Когда вы поместили NSOpenGLView в NSScrollView в Interface Builder, вы должны переопределить методы своего пользовательского представления:

  • - (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 view, если он используется.

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

person George    schedule 02.12.2014