Слой появляется с задержкой - PullRequest
0 голосов
/ 11 марта 2012

У меня есть игра для iPhone, в которой игроки могут твитнуть свои результаты.Для этого я использую TWTweetComposeViewController.

Поскольку загрузка листа Twitter может занять некоторое время, я бы хотел, чтобы слой «loading ...» появлялся после того, как игрок нажал кнопку твита, ожидаяДолжен появиться лист Twitter.

Моя проблема в том, что слой (названный "colcol" в приведенном ниже коде) отображается только после того, как лист твита готов!Как будто слой ждал, пока лист твита не будет готов к показу.Что, безусловно, не то, что я ожидаю.

Есть идеи почему?

Спасибо!

Вот функция tweetScore, вызываемая, когда пользователь касается CCMenuItemImage:

- (void) tweetScore: (CCMenuItem *) menuItem {
    colcol=[CCLayerColor layerWithColor:ccc4(0,0, 0, 200) width:50 height:50];
    colcol.position=ccp(winSize.width/2-25,winSize.height/2-25);
    [self addChild:colcol z:15];

    if ([TWTweetComposeViewController canSendTweet])
    {
        TWTweetComposeViewController *tweetSheet = [[TWTweetComposeViewController alloc] init];
        [tweetSheet setInitialText:[NSString stringWithFormat:@"I scored %d!", playerScore]];

        tweetSheet.completionHandler = ^(TWTweetComposeViewControllerResult result)  {

            [appDelegate.viewController dismissModalViewControllerAnimated:YES];
            switch (result) {
                case TWTweetComposeViewControllerResultCancelled:
                    [self removeChild:colcol cleanup:YES];
                    break;
                case TWTweetComposeViewControllerResultDone:
                    [[GCHelper sharedInstance] reportAchievementIdentifier:@"tweet_score" percentComplete:100.0];
                    [self removeChild:colcol cleanup:YES];
                    break;
                default:
                    [self removeChild:colcol cleanup:YES];
                    break;
            }
        };

        [appDelegate.viewController presentModalViewController:tweetSheet animated:YES];
    }
    else
    {
        // handle this case
    }

}

1 Ответ

2 голосов
/ 11 марта 2012

Как правило, обновления экрана в CoreAnimation, UIKit и OS X откладываются до конца текущего прохождения цикла выполнения. Вы добавляете CALayer, затем выполняете некоторую трудоемкую работу (настраивает TWTweetComposeViewController), , а затем , возвращаясь, чтобы цикл выполнения мог завершиться - поэтому у вас нет времени для обновления экрана между ними.

Попробуйте настроить TWTweetComposeViewController в отдельном проходе через цикл выполнения, используя dispatch_async(dispatch_get_main_queue(), ^{ /* your code here */ }).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...