黒にフェードアウトし、ビューコントローラーを交換してから透明にフェードバックするカスタムセグエを作成しています。残念ながら、私はそれを行うことができないようです。コードは次のとおりです。
- (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!");
}];
}];
}
そこで、私が行ったことは、黒の背景と 0 のアルファを持つナビゲーション コントローラーに UIView を追加することです。次に、アニメーションを実行してアルファを 1 に変更し、目的のビュー コントローラーをナビゲーション コントローラーにプッシュします。その後、アニメートしてクリアに戻ります。私がこれをすると、何も起こりません。アニメーションなしで、目的のView ControllerをNavigation Controllerにドロップするだけです。
奇妙なことに、アルファ 1 から始めて 0 にアニメーション化してから 1 に戻すと、うまくいきます (しかし、それは私が望むものではありません)。
明確な UIView を除外する最適化が行われていると考えているため、透明度を変更しても意味がありません。