在窗口大小调整大小时调整NSView / NSOpenGLView的大小

时间:2013-10-04 21:06:59

标签: objective-c macos opengl

我目前有一个mac应用程序,其开放时窗口大小设置为480 x 560,在此窗口中有一个NSOpenGLView,在重塑功能中,我有以下内容:

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);

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

2 个答案:

答案 0 :(得分:1)

我最后发现了如何做到这一点,我只需在NSOpenGLView类中输入以下内容。

[[self superview]setAutoresizingMask:NSViewWidthSizable];

可以使用Here on the NSView Class Reference Page

列出的任何值

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

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

由于我没有使用XIB文件,因此取代了Interface Builder中的图表,该图表更改了窗口更改大小时视图的大小变化。

答案 1 :(得分:0)

如果您使用的是Xcode 5,则可能需要在界面构建器中使用constraints。特别是,选择你的NSOpenGLView,点击" Pin"画布右下角的约束按钮,然后单击所有四个虚线红色括号使其呈红色。这会将NSOpenGLView限制在其超视图的维度。

Constraints