поддержка iphone opengl становится w = 0 h = 0 после MFMessageComposeViewController - PullRequest
1 голос
/ 15 июля 2010

У меня есть игра opengl для iPhone / iPad (универсальная). Я добавил возможность отправлять SMS-сообщения, используя MFMessageComposeViewController. Тестирование в реальном 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];
}

У меня есть UIViewController для моего glView, в котором я обрабатываю изменения ориентации для iPad и где я также помещаю материал MFMessage. (Технически, я полагаю, поскольку он универсален, есть два разных viewController, два делегата приложения и два пера - но я работаю на iPhone, установленном здесь, потому что iPad не смс). На iPad-макете Subsviews вызывается при изменении ориентации, мы уничтожаем и воссоздаем кадровые буферы нового размера, и все в порядке. Но вот при возвращении с отправки смс происходит сбой при повторном создании. Я могу опубликовать код в случае необходимости, но это стандартный код создания кадрового буфера.

Другим важным моментом является то, что я использую уведомление, чтобы сообщить методу внутри viewcontroller, чтобы запустить смс. Я попытался просто использовать эти методы в своем glview и сделать его MFMessageComposeViewControllerDelegate, но затем я получал ошибки, потому что glview - это UIView, а не UIViewController.

Есть идеи?

1 Ответ

1 голос
/ 16 июля 2010

Не уверен, является ли это ошибкой или в чем заключается сделка, но мне пришлось создать другое представление, сделать 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];
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...