2013-10-04 99 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文件,則只能使用此方法;我不是爲了這個項目! –