如何使用更快的SLComposeViewController制作presentViewController?

时间:2012-11-22 20:59:41

标签: iphone objective-c twitter slcomposeviewcontroller

我在我的应用上打开Twitter撰写视图,但屏幕显示时间太长了!

当用户点击twitter按钮时,我开始使用以下代码:

 if([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
{

    SLComposeViewController *tweet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];

    [tweet setInitialText:@"initial text "];


    [self presentViewController:tweet animated:YES completion:^
     {

     }];
}

但显示屏幕需要5到8秒!对我来说太长了,我看到了即时的应用程序。这不是我的应用程序的问题,因为我创建了一个只有这个功能的新项目,它也是一样的。

所以我认为延迟是在屏幕实例化的那一刻,所以我决定在我的标题上声明我的推文屏幕并将此部分移动到viewDidAppear:

if([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
{

tweet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];

[tweet setInitialText:@"initial text "];

并且按钮方法就是这样:

if(tweet)
[self presentViewController:tweet animated:YES completion:^
 {

 }];

但它没有变得更快。我正在使用iPhone 4,我有一些应用程序可以非常快速地创建Twitter撰写屏幕,有人知道如何做到这一点吗?

2 个答案:

答案 0 :(得分:0)

我有同样的问题 - 这让我发疯了。我通过主队列上的dispatch_async修复它

// Perform this on the main queue
__weak __typeof(self) weakSelf = self; 

dispatch_async(dispatch_get_main_queue(), ^{
    __strong __typeof(self) strongLocalSelf = weakSelf;


        SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
        [controller setInitialText:@"Share message"];
        [controller addURL:@"http://www.someURL.com"];
        [strongLocalSelf presentViewController:controller animated:NO completion:nil];


});

答案 1 :(得分:0)

这个问题一直困扰着我一整天!最后,我得到了一些技巧,使SLComposeViewController看起来更快。当我想第一次加载SLComposeVC时,SLComposer会在主线程中占用大量资源,但之后,它会显得完全正常而没有延迟......所以我想我们可能需要加载SLCompose在我们的视图控制器中查看(只需加载视图)和中提琴... SLComposerView将直接显示在视图中...

只需在appdelegate中添加此代码

即可
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{  ....

//loading the view...make twitter share dialog appear with no dellay
    if(NSClassFromString(@"SLComposeViewController") != nil){
        SLComposeViewController *composeViewController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
        [composeViewController view];
    }
   ...
}
  • 抱歉,如果我的英语不完美,我不是本地人。