【问题标题】:NSOpenGLView in NSScrollView?NSScrollView 中的 NSOpenGLView?
【发布时间】:2012-08-23 05:54:27
【问题描述】:

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

【问题讨论】:

  • 它可能不起作用的原因有很多。最好向我们展示您如何将其添加到滚动视图,以及如何调整大小。否则我们不可能帮助你。
  • 我刚刚把NSOpenGLView放到InterfaceBuilder中的NSScrollView中。认为它可以工作。但事实并非如此。到目前为止,我发现了一些信息,我需要将我的 nsscrollview documentView 大小设置为与 nsopenglview 大小相同。但我仍然没有找到任何信息如何做到这一点。以及它如何不起作用?当我滚动时,NSScrollView 看起来正在滚动,但 NSOpenGLView 保持在他的位置。所以每当 nsscrollview 滚动条移动时,我可能需要使用一些 glTranslatef 吗?

标签: objective-c opengl scroll nsscrollview nsopenglview


【解决方案1】:

当你在 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,如果使用它,最好自定义实现 Clip 视图。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多