1

我目前有一个 mac 应用程序,打开时的窗口大小设置为 480 x 560,在这个窗口中有一个NSOpenGLView, 在 reshape 函数中我有以下内容:

NSLog(@"Reshaping");
float screenWidth = (float)[_window frame].size.width;
float screenHeight = (float)[_window frame].size.height;
glLoadIdentity();
glViewport(0,0,screenWidth,screenHeight);
glMatrixMode(GL_PROJECTION);
glOrtho(-10, 110, -10, 110, -1, 1);

从 OpenGL 方面来看,这一切似乎都可以正常工作,图像拉伸等,但是当我使窗口大于原来的窗口时,OpenGL 视图似乎不想改变(但是其中的 OpenGL 确实如此)。我打印了以下值以查看问题所在:

NSLog(@"width 1:",[_window frame].size.width);
NSLog(@"width 2:",[self bounds].size.width);
NSLog(@"width 3:",[[self superview] bounds].size.width);

唯一改变的是第一个,其他两个可以手动更新(我尝试将它们设置为窗框值,但这些是只读的..)还是我在这里遗漏了什么?

4

2 回答 2

0

如果您使用的是 Xcode 5,您可能希望在界面生成器中使用约束。特别是,选择您的 NSOpenGLView,单击画布右下角的“Pin”约束按钮,然后单击所有四个红色虚线括号,使其变为纯红色。这会将 NSOpenGLView 限制为其父视图的尺寸。

约束

于 2014-06-04T05:10:31.967 回答
0

我最终发现了如何做到这一点,我只是在NSOpenGLView课堂上输入了以下内容。

[[self superview]setAutoresizingMask:NSViewWidthSizable];

它可以采用NSView 类参考页面上列出的任何值

它们也可以使用 OR 运算符进行组合,如下所示:

[[self superview]setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];

因为我没有使用 XIB 文件,所以它取代了 Interface Builder 中的图表,它改变了当窗口改变大小时视图如何改变大小。

于 2013-10-04T21:34:08.397 回答