0

问题- 根据 Apple 文档,准备和显示 MFMessageComposeViewController 很简单。我需要知道的是什么时候已经完全呈现出来了。


说明- 显示带有完成块的 MFMessageViewComposeController 很容易,但不能解决我的问题:

[self presentViewController:messageController animated:YES completion:^(void){

    //Controller has been shown. But not really....

}];

对于发给更大的收件人群体(例如 50 人)的消息,这个问题更为明显。完成块被调用,但手机的屏幕仍然是黑色的。几秒钟后,消息窗口出现。几秒钟后,收件人列表变为活动状态,光标闪烁。基本上,在控制器出现会进行大量的加载和处理。


我想要什么- 弄清楚界面何时已完全加载。我不期待一个简单的答案,而且我已经花了很多时间在上面——绝对值得赏金。如果您可以使用代码发布有效的答案,我将为此奖励最高奖金。

4

1 回答 1

0

只需检查 MFMailComposeViewController 视图的框架。一旦它到达屏幕顶部处理外观。

[self presentViewController:messageController animated:YES completion:^
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^
    {
        while(messageController.view.frame.origin.y > 0)
        {
        }

        dispatch_async(dispatch_get_main_queue(), ^
        {
            // Handle appearance of MFMailComposeViewController
        });
    });
}];

另一种方法是使用dispatch_after()方法等待0.3秒。但是这个时间间隔可能会在 iOS 的下一个版本中改变。

于 2014-03-28T08:04:27.087 回答