我正在使用一个简单的自定义segue从我的UIViewController到一个UINavigationController,它将UICollectionViewController保存为根视图控制器。
过渡按预期工作,但我第一次看到黑屏,只有当转换结束时,才会看到UICollectionViewController内容。
故事板:
Segue公司:
这是自定义segue的代码:
- (void)perform {
UIViewController *sourceViewController = self.sourceViewController;
UINavigationController *destinationViewController = self.destinationViewController;
[UIView animateWithDuration:0.25
delay:0.0
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
destinationViewController.topViewController.view.transform =
CGAffineTransformMakeTranslation(0, 0);
sourceViewController.view.transform =
CGAffineTransformMakeTranslation(-sourceViewController.view.frame.size.width, 0);
}
completion:^(BOOL finished){
[destinationViewController.topViewController.view removeFromSuperview]; // remove from temp super view
[sourceViewController presentViewController:destinationViewController animated:NO completion:NULL]; // present VC
}];
}
注意:
当我运行一个简单的show
segue时,集合视图按原样加载,无黑屏。
知道我在这里做错了吗?
答案 0 :(得分:2)
好的,让我们通过您的目标视图控制器,因为它看起来是黑色的: 您正在对目标视图控制器进行引用:
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/api/ [NC]
RewriteCond %{REQUEST_URI} !^/index\.php$ [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R]
然后你想用
为它设置动画UINavigationController *destinationViewController = self.destinationViewController;
所以你对尚未在屏幕上显示的视图进行操作。
然后在动画之后你会这样做:
destinationViewController.topViewController.view.transform = ...
所以你实际上在这里删除UIViewController superview而不是“temp”superview !
所以当你进入下一步
[destinationViewController.topViewController.view removeFromSuperview]; // remove from temp super view
这样做你的destinationViewController没有任何视图,所以它显示为黑屏。
要修复它,请复制视图动画,并在加载目标vc时删除。我相信,当我查看你的代码时,你会想到这一点。
所以基本理念是:
[sourceViewController presentViewController:destinationViewController animated:NO completion:NULL]; // present VC
当你使用autolayout yes或no时,代码会有所不同......但你应该从中得到一个基本的想法。
答案 1 :(得分:-2)
当您提交动画时,您将转换当前控制器的视图,结果是离开窗口,或者rootViewController的视图背景颜色为黑色。你看到黑屏'是有道理的。动画持续时间--- 0.25秒