SLComposeViewController出现缓慢

3

SLComposeViewController在展示时需要3-4秒才能出现。但是presentViewController:(UIViewController *) animated:(BOOL) completion:^(void)completion方法的完成块会立即被调用。因此,即使我使用了加载指示器,它也会在一瞬间消失。相关代码如下所示。顺便说一句,我尝试过dispatch_async,但它没有起作用。

你有什么想法可以加快这个过程吗?

SLComposeViewController *shareView = [SLComposeViewController composeViewControllerForServiceType: SLServiceTypeFacebook];
[shareView setTitle:@"Title"];
[shareView setInitialText:@"Description"];
[shareView addURL:[NSURL URLWithString:@"http://www.google.com/"]];
[shareView setCompletionHandler:^(SLComposeViewControllerResult result) {

    switch (result) {
        case SLComposeViewControllerResultCancelled:
        {
            NSLog(@"Facebook Post Canceled");
            break;
        }
        case SLComposeViewControllerResultDone:
        {
            NSLog(@"Facebook Post Successful");
            break;
        }
        default:
            break;
    }
}];

UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
activityView.center = CGPointMake([UIScreen mainScreen].bounds.size.width / 2.0, [UIScreen mainScreen].bounds.size.height / 2.0);
[activityView startAnimating];
[self.view addSubview:activityView];

[self presentViewController:shareView animated:YES completion:^{
    NSLog(@"Presented facebook");
    [activityView removeFromSuperview];
}];

你有检查过这个吗?https://dev59.com/9GvXa4cB1Zd3GeqPGzNF - Vizllx
是的,我已经检查过了。我发了一个新问题,因为我想问为什么完成块返回,但视图出现的速度却没有那么快。 - mkeremkeskin
你找到一个可行的解决方案了吗? - BoilingLime
@BoilingLime,我没办法让它快速出现。所以我放了一个动画文本,就像Android toast一样,显示“正在打开共享屏幕”,持续1秒钟。 - mkeremkeskin
1个回答

0

所以,这不是一个解决方法,但它可能会对你有所帮助。我无法让这个东西更快地出现,我认为它只是在显示之前拉取数据的实现。

由于presentViewController完成几乎瞬间执行,我的解决方法是显示进度视图,并设置一个选择器在2秒后执行。选择器只需隐藏进度视图,以下是示例。

[MBProgressHUD showHUDAddedTo:self.view animated:YES];
[self performSelector:@selector(hideProgressView) withObject:nil afterDelay:2.0f];

[self presentViewController:self.composeViewController animated:YES completion:nil];


- (void)hideProgressView
{
    [MBProgressHUD hideHUDForView:self.view animated:YES];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接