我的应用程序中有一堆回合制游戏,我使用相同的动画来宣告首发玩家。
在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];
}
我在所有VC中使用默认过渡样式cover vertical
。我尝试使用performSelector延迟调用[self showStartingPlayer];
延迟,但不同的设备需要不同的延迟值,因此它不是一个强大的解决方案。我可以在viewcontroller生命周期中使用任何其他方法而不是viewDidLoad或任何实际的方法来做这样的事情吗?
答案 0 :(得分:1)
如果您使用presentViewController: animated: completion:
,我会利用完成块通知视图控制器转换已完成。
-(void)wasJustPresented
的公共方法,该方法调用必要的UI布局。
然后,在完成块中调用它。例如:
[self presentViewController:newVC
animated:YES
completion:^(void){
[newVC wasJustPresented];
}];
这将确保您的视图控制器在完成呈现后立即得到通知。
答案 1 :(得分:0)
viewDidLoad
,但这并不意味着它实际上在屏幕上可见。
您可以使用- (void) viewDidAppear:
来执行此操作。
答案 2 :(得分:0)
您应该尝试在视图转换完成时调用的viewDidAppear
内调用您的方法。
-(void)viewDidAppear:animated
{
[super viewDidAppear:animated];
//put your call here
}