3

我正在制作一个淡入黑色的自定义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,因此更改透明度是没有意义的。

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 回答