当我在我的视图故事板起源的根视图控制器上呈现模式视图控制器时,它会闪烁故事板视图,即使它已被更改。我的根视图控制器有一个明亮的绿色背景,顶部有一个大的白色子视图,其中包含一个绑定到 IBOutlet 的标签。在 UIViewController viewDidLoad 中,我添加了一个浅灰色、略微透明的 UIView,它作为 viewcontroller 视图的子视图覆盖整个视图。我还将标签文本设置为不同于情节提要布局的标签文本。
当我通过 segue 或通过 presentViewController:completion: 触发模式时,我看到的是标签上的浅灰色视图,然后在代码中添加的视图似乎变得透明并动画消失,并且情节提要布局的亮绿色出现并且然后模态视图交叉溶解。当我关闭第一个并在完成块中呈现第二个时,我看到交叉溶解为亮绿色,当添加的视图再次可见时弹出光,弹出亮绿色和十字-溶解在第二个视图控制器的视图中。
当我关闭第二个视图控制器时,我会看到交叉溶解为亮绿色,然后添加的浅灰色、半透明视图弹回可见。
任何人都知道如何阻止交叉溶解显示代码中添加的视图下方的视图?
如果您从 viewDidLoad 中添加的覆盖视图中删除不透明度,则此示例会变得更加不和谐。
https://github.com/jonnolen/ios-cross-disolve-problem
代码片段和故事板布局:
@interface DTViewController (){
BOOL hasShownSegue;
}
@end
@implementation DTViewController
- (void)viewDidLoad
{
[super viewDidLoad];
UIView * view = [UIView new];
view.frame = self.view.bounds;
view.backgroundColor = [UIColor colorWithWhite:.95 alpha:.7];
NSLog(@"View Bounds: %@", NSStringFromCGRect(self.view.bounds));
[self.view addSubview:view];
self.label.text = @"Hello!";
}
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
if (!hasShownSegue){
[self performSegueWithIdentifier:@"modal.1.segue" sender:self];
hasShownSegue = YES;
}
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
DTCallbackViewController *vc = segue.destinationViewController;
vc.completionCallback = ^{
[self dismissViewControllerAnimated:YES completion:^{
DTCallbackViewController * vc = [self.storyboard instantiateViewControllerWithIdentifier:@"vc.2"];
vc.completionCallback = ^{
[self dismissViewControllerAnimated:YES completion:nil];
};
[self presentViewController:vc animated:YES completion:nil];
}];
};
}