现在经过一些实验,我找到了解决方案,如果我错了,请纠正我。至少这对我有用,希望其他人也可以使用它。
CCDirectorIOS 是一个 UIViewController,它通常被设置为rootViewController
app的一个window
。
Looks like[window rootViewController]
负责在view
每次方向更改时使其全屏显示,从而迫使所有孩子进行布局(我知道!!!%)。
因此,为了避免 glView 不时收缩到整个窗口,给窗口另一个 UIViewController 作为 rootController,而不是 CCDirector。另一个 UIViewController 应该有它自己的全新 UIView。这个新的 rootView 是这个 rootViewController 可以随心所欲地调整大小的东西,不用管我们的 glView。现在,将director 指定为rootController 的子级,并将glView 指定为rootView 的子级。
将 glView 设置为您想要的大小 - 我们开始吧!现在,当 rootView 调整大小时,glView 不会。在我的情况下,它仍然必须在保持可用空间比例的同时调整大小,所以我在它上面使用了 setAutoresizingMask。请大师告诉你的想法。
已知警告:
应用程序 AppDelegate 中的代码(假设 ARC 为 ON):
-(void) initializationComplete
{
#ifdef KK_PLATFORM_IOS
RootViewController * rootvc = [[RootViewController alloc]init];
UIView * rootView = [[UIView alloc]init];
[rootvc setView:rootView];
[rootvc.view setBackgroundColor:[UIColor blueColor]];//to see views in colors
[window setRootViewController:rootvc];
[rootvc addChildViewController:[CCDirector sharedDirector]];
UIView * glview = [[CCDirector sharedDirector]view];
[rootvc.view addSubview:glview];//[[CCDirector sharedDirector]openGLView]];
CGRect glRect = CGRectInset(rootvc.view.bounds, 50, 50);//our glview frame is smaller than rootView frame
[glview setFrame:glRect];
[glview setAutoresizingMask: UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth];//so the view size follows window's size even though it's not fullscreen
#endif
}