いくつかの実験の後、私はある種の解決策を見つけました。間違っている場合は訂正してください。少なくともこれは私にとってはうまくいきました、誰か他の人がそれを利用することを願っています。
CCDirectorIOSはUIViewControllerであり、通常rootViewController
はアプリのとして設定されていwindow
ます。
向きが変わるたびに全画面表示に[window rootViewController]
する責任があるようです。したがって、すべての子にレイアウトを強制します(私はそれを知っていました!!!%)。view
したがって、glViewがウィンドウ全体に縮小するのを避けるために、CCDirectorではなくrootControllerとしてウィンドウに別のUIViewControllerを指定します。別のUIViewControllerには、独自の新しいUIViewが必要です。この新しいrootViewは、このrootViewControllerが必要に応じてサイズを変更できるものであり、glViewはそのままにしておきます。ここで、directorをrootControllerの子として割り当て、glViewをrootViewの子として割り当てます。
glViewを必要なサイズに設定します。これで、rootViewのサイズが変更されても、glViewは変更されません。私の場合、空き領域の比率を維持しながらサイズを変更する必要があったため、setAutoresizingMaskを使用しました。教祖にあなたの考えを教えてください。
既知の警告:
アプリのAppDelegate内のコード(ARCがオンになっていると仮定):
-(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
}