我正在尝试在以下代码中调试一个非常奇怪的问题:
if(condition1) {
ImageViewController* imageViewer = [[ImageViewController alloc] initWithImageData:tappedItem];
[self presentViewController:imageViewer animated:YES completion:^{
[imageViewer loadImage];
}];
}
else if(condition2) {
DocumentViewController* docViewer = [[DocumentViewController alloc] init];
[self presentViewController:docViewer animated:YES completion:nil];
}
换句话说,根据condition1
和condition2
的状态,UIViewController
的两个子类之一将以模态方式显示给用户。
在第二种情况下一切都很好,但在第一种情况下,视图控制器没有显示通常的动画,显示它从屏幕底部滑入。相反,经过短暂的延迟,它只是突然出现,覆盖整个屏幕。另一个奇怪的是,在解雇动画中,视图控制器内的图像视图是透明的。
删除完成块无效。用UIViewController
实例替换我的视图控制器也没有任何效果,除了证明由于某种原因,动画也不适用于UIViewController
个实例。
认为我可能在viewDidLoad
等中做错了,我试着评论视图加载/显示方法,但无济于事。
将视图控制器推入导航堆栈不是一个选项,因为该应用程序有一个标签栏,我不想显示。
更新
使用ImageViewController
替换DocumentViewController
的实例会导致动画效果。现在的问题是:我可以在ImageViewController
中做些什么来搞乱动画?
答案 0 :(得分:4)
我找到了一个解决方案,但我仍然不知道真正的原因是什么。
修复方法是为其UIViewController
方法以模态方式显示的viewDidload
视图设置背景颜色,例如
self.view.backgroundColor = [UIColor grayColor];
如果我弄清楚到底发生了什么,我会在这里发帖。
答案 1 :(得分:0)
如何在标签栏控制器上显示视图控制器:
if(condition1) {
ImageViewController* imageViewer = [[ImageViewController alloc] initWithImageData:tappedItem];
[self.tabBarController presentViewController:imageViewer animated:YES completion:^{
[imageViewer loadImage];
}];
}
else if(condition2) {
DocumentViewController* docViewer = [[DocumentViewController alloc] init];
[self.tabBarController presentViewController:docViewer animated:YES completion:nil];
}
答案 2 :(得分:0)
它也发生在我身上..改变背景颜色并没有真正帮助。 我做了以下 - 它变得相当不错:
-(void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:NO];
self.view.userInteractionEnabled = FALSE;
self.view.hidden = TRUE;
self.navigationController.navigationBar.alpha = 0;
}
-(void) viewDidAppear:(BOOL)animated
{
[super viewDidAppear:NO];
float width = self.view.frame.size.width;
float height = self.view.frame.size.height;
self.view.frame = CGRectMake(0, height, width, height);
self.view.hidden = FALSE;
[UIView animateWithDuration:0.7f animations:^{
self.view.frame = CGRectMake(0, 0, width, height);
self.navigationController.navigationBar.alpha = 1;
} completion:^(BOOL finished){
self.view.userInteractionEnabled = TRUE;
}];
}
答案 3 :(得分:0)
在iOS 8中为我设置背景颜色。 同时取消选中Interface Builder中的不透明设置!