繁体   English   中英

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

[英]Resizing NSView / NSOpenGLView on window resize

我目前有一个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);

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

我最终找到了解决方法,我只是在NSOpenGLView类中输入了以下内容。

[[self superview]setAutoresizingMask:NSViewWidthSizable];

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

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

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

因为我没有使用XIB文件,所以它代替了Interface Builder中的图,该图在窗口更改大小时更改了视图更改大小的方式。

如果您使用的是Xcode 5,则可能要使用接口构建器中的约束 特别是,选择您的NSOpenGLView,单击画布右下角的“ Pin”约束按钮,然后单击所有四个虚线的红色括号将其变为红色。 这会将NSOpenGLView限制为其超级视图的尺寸。

约束

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM