3

黒にフェードアウトし、ビューコントローラーを交換してから透明にフェードバックするカスタムセグエを作成しています。残念ながら、私はそれを行うことができないようです。コードは次のとおりです。

- (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 を除外する最適化が行われていると考えているため、透明度を変更しても意味がありません。

4

1 に答える 1

2

これを行うとどうなりますか?

...
[overlay setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:1.0]];
[overlay setAlpha:0.0];
[[self.sourceViewController navigationController].view addSubview:overlay];
...
于 2013-04-10T18:12:51.170 に答える