在MFMessageComposeViewController之后,iphone opengl支持变为w = 0 h = 0

时间:2010-07-15 14:45:08

标签: iphone objective-c uiview uiviewcontroller

我有一个适用于iPhone / iPad的opengl游戏(通用)。我添加了使用MFMessageComposeViewController发送SMS消息的功能。在真正的iPhone中测试。 SMS作曲家工作表在我的视图上动画,我可以发送消息,不会调用didFinishWithResult,当我[self dismissModalViewControllerAnimated:YES]它消失了,我的glview被要求layoutSubviews。此时,后备宽度和高度现在为零,我的帧缓冲状态检查失败。 self.layer.frame.size.width仍然是320x460。

- (void)layoutSubviews
{
    NSLog(@"layoutSubviews");
    [EAGLContext setCurrentContext:context];
    [self destroyFramebuffer];
    [self createFramebuffer];
    [self drawView];
}

我有一个用于我的glView的UIViewController,这是我处理iPad的方向更改的地方,也是我放置MFMessage的东西。 (从技术上讲,我猜它是通用的,有两个不同的viewControllers,两个应用代表和两个笔尖 - 但我在这里设置iPhone,因为iPad没有短信)。在iPad上,当方向改变时,会调用子视图,我们会以新的大小销毁并重新创建帧缓冲区,一切都很好。但是,当从发送短信回来时,它在重新创建时失败了。我可以在必要时发布代码,但它是标准创建帧缓冲区代码。

另一个重点是我正在使用通知告诉viewcontroller内部的方法来启动短信。我尝试在glview中使用这些方法并使其成为MFMessageComposeViewControllerDelegate,但后来我遇到错误,因为glview是一个UIView而不是UIViewController。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

不确定这是一个错误还是交易是什么,但我必须创建另一个视图,在呈现模式之前创建self.view = anotherView,保留我的glview和removeFromSuperview。然后等待我的glview回来,直到所有动画都回到原位。

如果有人想要更多信息,请告诉我。

使用实际答案进行编辑:

这是一个错误,因为我怀疑它与状态栏有关。我的应用没有状态栏。但是当我

    [self presentModalViewController:controller animated:YES];

SMS消息编辑器视图确实显示了iphone状态栏。当它被解雇时,我的应用程序通过我的帧缓冲区显示出来了。我已经想出了一个奇怪的工作来切换视图以保护我的glview帧缓冲区 - 但后来想到在解雇之前添加一个statusBarHidden并且现在一切都很好。这是解雇代码:

    - (void)messageComposeViewController:(MFMessageComposeViewController *)controller 
             didFinishWithResult:(MessageComposeResult)result {

      // Notifies users about errors associated with the interface
      switch (result)
      { ... }
      [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
      [self dismissModalViewControllerAnimated:YES];
    }