2

我的 NSOpenGLView 有缩放方法。如果图像被放大,则 NSOpenGLView 帧大小、视口等正在增加。如果 NSOpenGLView 被缩小(帧大小、视口等正在减少),也会发生同样的事情。所以我需要,如果图像被放大,NSOpenGLView 比我的窗口大,滚动条应该出现。所以我认为将 NSOpenGLView 放到 NSScrollView 将是我的解决方案。但事实并非如此。它不起作用。那我怎么能做到呢?

4

1 回答 1

0

在 Interface Builder 中将 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 {
};

但它是hack,如果使用它,最好自定义实现剪辑视图。

如果要缩放 OpenGL 视图,只需更改其帧大小。

于 2014-12-02T10:14:56.030 回答