0

我的应用程序中有一堆基于回合的游戏,我使用相同的动画来声明起始玩家。

在 viewDidLoad 的最后,我放置了声明代码。它会截取当前视图的屏幕截图,然后将其稍微模糊,并出现标签以显示起始玩家的名称。问题是有时它发生得很快,我得到了前一个视图的屏幕截图,标签出现在前一个视图的模糊屏幕截图上。

我的 viewDidLoad 看起来像这样:

-(void) viewDidLoad
{
    [super viewDidLoad];

    [self initializeThings];

    [self layoutUI]; //In some of the games this part requires heavy processing,
                     //ie laying out a 2D array of buttons (20x20=400 of them)

    [self showStartingPlayer];
}

cover vertical我在所有 VC 中使用默认的过渡风格。我尝试通过使用带有延迟的 performSelector 来调用[self showStartingPlayer];deferred,但不同的设备需要不同的延迟值,因此它不是一个强大的解决方案。我可以在 viewcontroller 生命周期中使用任何其他方法而不是 viewDidLoad 或任何实用的方法来做这样的事情吗?

4

3 回答 3

1

如果您正在使用presentViewController: animated: completion:,我会利用完成块来通知视图控制器过渡已完成。

例如,您可以添加一个调用-(void)wasJustPresented视图控制器的公共方法,该方法调用必要的 UI 布局。

然后,在您的完成块中调用它。前任:

[self presentViewController:newVC
                   animated:YES
                 completion:^(void){
            [newVC wasJustPresented];
            }];

这将确保您的视图控制器在完成呈现后立即得到通知。

于 2013-06-09T01:49:29.753 回答
0

viewDidLoad当视图控制器的视图已加载时调用,但这并不意味着它实际上在屏幕上可见。

你可以用- (void) viewDidAppear:它来做。

于 2013-06-08T23:50:28.573 回答
0

您应该尝试viewDidAppear在视图转换完成时调用您的方法。

-(void)viewDidAppear:animated
{
    [super viewDidAppear:animated];
    //put your call here
}
于 2013-06-08T23:52:57.743 回答