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