0

GLKViewの初期サイズを設定しようとしています(基本的に、タブバーが存在するにもかかわらず、画面のサイズと正確に一致させたい)。ストーリーボードを使用しているため、GLKViewはGLKViewController initメソッド内で自動的に作成されます(確かではありませんが、実際には文書化されていませんが、そう思います)。GLKViewControllerには、viewDidLoadメソッドしかありません。これは次のとおりです。

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
    if (!self.context) {
        NSLog(@"Failed to create ES context");
    }

    GLKView *view = (GLKView *)self.view;
    view.context = self.context;
}

したがって、ストーリーボードを使用しない場合は、次のように記述します。

EAGLContext * context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
GLKView *view = [[GLKView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
view.context = context;
view.delegate = self;

GLKViewController * viewController = [[GLKViewController alloc] initWithNibName:nil bundle:nil];
viewController.view = view;

しかし、ストーリーボードを使用する場合、これを行う機会はありません。

GLKView *view = [[GLKView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

既存のビューのフレームを変更し、新しいGLKViewを作成してから、それをviewController.viewに割り当てようとしましたが、結果はありません。

別の方法などでGLKViewのサイズを設定または変更することは可能ですか?

4

1 に答える 1

0

解決策を見つけました。

まず、ストーリーボードの GLKViewController の "Wants Full Screen" プロパティを true に変更する必要があります。これにより、次のように、GLKView のサイズを変更せずにステータス バーを条件付きで非表示にすることができます。

 [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];

次に、タブバーのサブビューのフレームをフルスクリーン フレームに変更する必要があります。これは、タブ バーの下に何かを表示する唯一の作業方法のようです。このメソッドは、TabViewController 子クラスに配置する必要があります。

- (void)viewDidLoad
{
    [super viewDidLoad];

    CGRect tabbarFrame = CGRectZero;
    for (UIView *view in self.view.subviews)
    {
        if ([view isKindOfClass:[UITabBar class]])
        {
            tabbarFrame = view.frame;
            break;
        }
    }    

    for (UIView *view in self.view.subviews)
    {
        if (![view isKindOfClass:[UITabBar class]])
        {
            view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y, 
                                    view.frame.size.width, view.frame.size.height + tabbarFrame.size.height);
        }
    }
}

繰り返しになりますが、必要に応じて、次の短いコードを使用してタブ バーを非表示にできます。

for (UIView *view in self.view.subviews)
{
    if ([view isKindOfClass:[UITabBar class]])
    {
        [UIView animateWithDuration:0.4f
                         animations:^{
                            [view setAlpha:0.f];
                         }
                         completion:nil];
        break;
    }
}    
于 2012-06-02T15:16:00.043 に答える