當我在視圖故事板原始根視圖控制器上呈現模態視圖控制器時,它將閃爍故事板視圖,即使它已被更改。我的根視圖控制器有一個明亮的綠色背景,頂部有一個大的白色子視圖,其中包含綁定到IBOutlet的標籤。在UIViewController中viewDidLoad我添加了一個淺灰色,稍微透明的UIView,它覆蓋了整個視圖作爲viewcontroller視圖的子視圖。我還將標籤文本設置爲與Storyboard佈局不同。呈現具有交叉解析的模式視圖控制器不會在代碼中顯示視圖
當我通過segue或者通過presentViewController觸發模態時:完成:我看到的是我的標籤上的淺灰色視圖,然後在代碼中添加的視圖變得透明和動畫離開,故事板上的亮綠色佈局顯示,然後模式視圖交叉溶解。當我忽略完成塊中的第一個和第二個時,我看到交叉溶解爲亮綠色,隨着添加的視圖再次變爲可見,光線流出,彈出到明亮綠色和第二個視圖控制器視圖的交叉溶入。
當我關閉第二個視圖控制器時,我看到交叉溶出到明亮的綠色,然後添加的淺灰色半透明視圖彈出回到可見狀態。
任何人都有任何想法如何阻止交叉溶解顯示代碼中添加視圖下的視圖?
如果您從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];
}];
};
}
您描述了您所看到的內容,但從您的問題中不完全清楚您想要發生什麼。 – rdelmar