2013-10-04 169 views
0

我现在有与所述窗口大小上开口设定为480 * 560的Mac应用程序,该窗口内有一个NSOpenGLView,在重塑功能此我有以下:调整大小的NSView/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); 

和改变只有一个是第一位的,可以另外两个手动更新(我试着将它们设置为窗框值,但这些都是只读..)或我在这里错过了什么?

回答

1

我发现如何做到最后,我只是在NSOpenGLView类中输入以下内容。

[[self superview]setAutoresizingMask:NSViewWidthSizable]; 

它可以采取任何值的上市Here on the NSView Class Reference Page

它们也可以组合成使用或者如下操作:

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

,因为我不使用XIB文件,这取代了Interface Builder中的图表,它改变了当窗口更改大小时视图更改大小的方式。

0

如果您使用Xcode 5,则可能需要在界面构建器中使用constraints。特别是,选择您的NSOpenGLView,单击画布右下角的“Pin”约束按钮,然后单击全部四个红色的红色括号以使它们变为红色。这将限制NSOpenGLView到它的超级视图的尺寸。

Constraints

+1

如果您使用的是nib文件,则只能使用此方法;我不是为了这个项目! –