0

kobold2d ライブラリを使用して、UIKit GUI 要素に加えて cocos2d シーンをアプリに含めたいので、画面の一部だけを使用する必要があります。

最初のレイヤーを初期化するときに、cocos2d glview のサイズを次のように変更します。

UIView * glView = [[CCDirector sharedDirector]view];
    CGRect rct = CGRectMake(100, 100, 300, 400);

    [glView setFrame:rct];

向きを変更するまでビューは正しく表示され、glview は再びフルスクリーンになります。この動作を無効にする方法はありますか?

XCode 4.5.2、iOS 6、Kobold2D 2.04

4

2 に答える 2

0

いくつかの実験の後、私はある種の解決策を見つけました。間違っている場合は訂正してください。少なくともこれは私にとってはうまくいきました、誰か他の人がそれを利用することを願っています。

CCDirectorIOSはUIViewControllerであり、通常rootViewControllerはアプリのとして設定されていwindowます。

向きが変わるたびに全画面表示に[window rootViewController]する責任があるようです。したがって、すべての子にレイアウトを強制します(私はそれを知っていました!!!%)。view

したがって、glViewがウィンドウ全体に縮小するのを避けるために、CCDirectorではなくrootControllerとしてウィンドウに別のUIViewControllerを指定します。別のUIViewControllerには、独自の新しいUIViewが必要です。この新しいrootViewは、このrootViewControllerが必要に応じてサイズを変更できるものであり、glViewはそのままにしておきます。ここで、directorをrootControllerの子として割り当て、glViewをrootViewの子として割り当てます。

glViewを必要なサイズに設定します。これで、rootViewのサイズが変更されても、glViewは変更されません。私の場合、空き領域の比率を維持しながらサイズを変更する必要があったため、setAutoresizingMaskを使用しました。教祖にあなたの考えを教えてください。

既知の警告:

  • KKAppDelegateのrootControllerとnavControllerは、適切な初期方向を除いて使用されません

  • これにより、addChildViewController:メソッドにより、iOSバージョンが最小のバーが5になります。

アプリの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

}
于 2013-01-24T13:57:50.130 に答える
0

フレームを設定した後に reshape を呼び出すと役立つ場合があります。

UIView * glView = [[CCDirector sharedDirector]view];
CGRect rct = CGRectMake(100, 100, 300, 400);

[glView setFrame:rct];
[glView reshape];
于 2013-01-23T12:04:18.673 に答える