层出现延迟

时间:2012-03-10 23:26:40

标签: iphone xcode cocoa-touch cocos2d-iphone

我有一款iPhone游戏,其中玩家可以发布他们的分数。 我为此使用了TWTweetComposeViewController。

由于Twitter工作表可能需要一些时间来加载,我想在播放器点击推文按钮后等待Twitter工作表显示时显示“loading ...”图层。

我的问题是,一旦推文表准备就绪,图层(下面代码中名为“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 个答案:

答案 0 :(得分:2)

通常,CoreAnimation,UIKit和OS X中的屏幕更新将推迟到当前通过运行循环结束。您正在添加CALayer,然后执行一些耗时的工作(设置TWTweetComposeViewController),然后返回,以便运行循环可以完成 - 因此没有时间在其间进行屏幕更新。

尝试使用dispatch_async(dispatch_get_main_queue(), ^{ /* your code here */ })在运行循环中单独设置TWTweetComposeViewController。