Как сделать PresentViewController быстрее с помощью 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, и у меня есть несколько приложений, которые очень быстро создают экран создания твиттера. Кто-нибудь знает, как это сделать?


person Roberto Ferraz    schedule 22.11.2012    source источник
comment
Этого не должно происходить, если нет фрагмента кода, потребляющего потоки, который вы пропустили. Включили ли вы в симуляторе медленную анимацию?   -  person Mick MacCallum    schedule 21.12.2012
comment
Привет @ 0x7fffffff .. спасибо за ответ .. Я даже не знал, что можно включить медленную анимацию .. =) В любом случае я использую устройство для тестирования ..   -  person Roberto Ferraz    schedule 22.12.2012
comment
Да, это может быть действительно полезно, когда вы пытаетесь убедиться, что что-то анимируется правильно. И есть ли в вашей функции какой-либо код непосредственно над этим?   -  person Mick MacCallum    schedule 22.12.2012
comment
Также возникла эта проблема на iPhone 4 с iOS 7.0.3 - очень неприятно!   -  person GracelessROB    schedule 20.11.2013
comment
Я начал тему на форумах разработчиков Apple, так что, возможно, мы сможем там получить ответ. devforums.apple.com/message/920016   -  person GracelessROB    schedule 20.11.2013
comment
У меня такая же проблема на устройстве. iOS 7.1. Медленно как ад. Вы нашли для этого решение? Спасибо.   -  person Duck    schedule 26.03.2014
comment
Анимация презентации для меня тоже очень медленная и прерывистая. Любое решение?   -  person soleil    schedule 13.06.2014
comment
@RobertoFerraz повезло с этим?   -  person max_    schedule 19.08.2014
comment
Нет .. не совсем @max_   -  person Roberto Ferraz    schedule 20.08.2014
comment
Вот обходной путь, который может вам помочь: stackoverflow.com/a/38964293/1322108   -  person nenchev    schedule 16.08.2016


Ответы (2)


У меня была такая же проблема - это сводило меня с ума. Я исправил это с помощью 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];


});
person Craig MacKenzie    schedule 25.08.2014

Эта проблема меня уже целый день беспокоит! Наконец, у меня есть трюк, чтобы 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];
    }
   ...
}
  • извините, если мой английский не идеален, я не коренной.
person Frans    schedule 04.12.2014
comment
К сожалению, это не помогает - person David Schwartz; 23.10.2015