我有一款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
}
}
答案 0 :(得分:2)
通常,CoreAnimation,UIKit和OS X中的屏幕更新将推迟到当前通过运行循环结束。您正在添加CALayer,然后执行一些耗时的工作(设置TWTweetComposeViewController),然后返回,以便运行循环可以完成 - 因此没有时间在其间进行屏幕更新。
尝试使用dispatch_async(dispatch_get_main_queue(), ^{ /* your code here */ })
在运行循环中单独设置TWTweetComposeViewController。