簡體   English   中英

MFMessageComposeViewController之后,iPhone opengl支持變為w = 0 h = 0

[英]iphone opengl backing becomes w=0 h=0 after MFMessageComposeViewController

我有一個適用於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。 (從技術上講,我想因為它是通用的,所以有兩個不同的viewController,兩個App Delegates和兩個筆尖-但我在這里使用的是iPhone,因為iPad不會發短信)。 在iPad上,當方向改變時會調用Subviews,我們以新的大小銷毀並重新創建幀緩沖區,一切都很好。 但是在這里,當從發送SMS返回時,它在重新創建上失敗。 如果需要,我可以發布代碼,但是它是標准的創建幀緩沖區代碼。

另一個重要的一點是,我正在使用通知來告知ViewController內部的方法來啟動sms內容。 我嘗試僅在glview中使用這些方法並將其設置為MFMessageComposeViewControllerDelegate,但隨后出現錯誤,因為glview是UIView而不是UIViewController。

有任何想法嗎?

不知道這是一個錯誤還是要解決的問題,但是我不得不創建另一個視圖,使self.view = anotherView,保留我的glview並在顯示模式之前移除removeFromSuperview。 然后等我的視線恢復原狀,直到一切恢復原狀。

如果有人需要更多信息,請告訴我。

使用實際答案進行編輯:

這是一個錯誤,而且我懷疑它與狀態欄有關。 我的應用程序沒有狀態欄。 但是當我

    [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];
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM