我目前有一个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);
唯一一个改变的是第一个,可以手动更新其他两个(我尝试将它们设置为窗口框架值,但这些是只读的。)或者我在这里遗漏了什么?
答案 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限制在其超视图的维度。