我正在制作一个淡入黑色的自定义segue,换出视图控制器,然后淡出透明。不幸的是,我似乎无法做到这一点。这是代码:
- (void)perform {
UIView *overlay = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [self.sourceViewController navigationController].view.frame.size.width, [self.sourceViewController navigationController].view.frame.size.height)];
[overlay setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.0]];
[[self.sourceViewController navigationController].view addSubview:overlay];
[UIView animateWithDuration:2.0 delay:0.0 options:(UIViewAnimationOptionCurveEaseIn) animations:^{
[overlay setAlpha:1.0];
}completion:^(BOOL finished) {
[[self.sourceViewController navigationController] pushViewController:[self destinationViewController] animated:NO];
[UIView animateWithDuration:2.0 delay:0.0 options:(UIViewAnimationOptionCurveEaseIn) animations:^{
[overlay setAlpha:0.0];
}completion:^(BOOL finished) {
[overlay removeFromSuperview];
NSLog(@"Done!");
}];
}];
}
所以,我所做的是将 UIView 添加到具有黑色背景和 alpha 为 0 的导航控制器。然后,我制作动画以将 alpha 更改为 1,将目标视图控制器推送到导航控制器上,然后然后动画回来清除。当我这样做时,什么也没有发生。它只是将目标视图控制器放到导航控制器上,没有任何动画。
奇怪的是,如果我从 1 的 alpha 开始并动画到 0 然后回到 1,它可以工作(但这不是我想要的)。
我认为发生了一些优化,排除了我清晰的 UIView,因此更改透明度是没有意义的。