【问题标题】:Animation of alpha on UIView not workingUIView 上的 alpha 动画不起作用
【发布时间】:2013-04-10 17:31:23
【问题描述】:

我正在制作一个渐变为黑色的自定义 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,因此更改透明度毫无意义。

【问题讨论】:

    标签: ios storyboard uistoryboard uiviewanimation uistoryboardsegue


    【解决方案1】:

    如果你这样做会发生什么?

    ...
    [overlay setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:1.0]];
    [overlay setAlpha:0.0];
    [[self.sourceViewController navigationController].view addSubview:overlay];
    ...
    

    【讨论】:

    • @JonA,您正在为视图上的 alpha 设置动画,而不是背景颜色。因此,您需要将背景颜色设置为不透明,并以视图上的 alpha 开头为透明。
    • 哦,当然。今天不能在所有气缸上点火。感谢您的跟进。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多