我有一个适用于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。
有什么想法吗?
答案 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];
}