动画完成称为立即完成

时间:2015-05-12 03:55:08

标签: ios objective-c animation ios8

我现在很困惑。

当值为动画动作时,此条件正常。 但是当没有立即调用值时就说明了。

我不知道两者之间是否有任何区别。

- (void)setDimView : (UIView*)targetView state:(BOOL)state
{
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    UIView *dim = [[UIView alloc]initWithFrame:screenRect];
    dim.tag = TAG;
    if (state)
    {
       dim.alpha = 0.0;
    }


    [UIView transitionWithView:dim duration:0.5 options:UIViewAnimationOptionCurveEaseOut animations:^ {
        if (state)
        {
            [targetView setHidden:NO];
            [targetView addSubview:dim];

            dim.backgroundColor = [UIColor blackColor];
            dim.alpha = 0.6;
        }
        else
        {
            dim.alpha = 0.0;

        }
    }completion:^(BOOL finished) {
        if (!state)
        {
            for (UIView *subview in [targetView subviews])
            {
                if (subview.tag == TAG)
                {
                    [subview removeFromSuperview];
                    [targetView setHidden:YES];
                }
            }
        }
    }];
}

2 个答案:

答案 0 :(得分:0)

这个块工作序列首先称为动画块然后是完成块,但是如果你设置了动画NO,那么它立即调用完成。

我不明白为什么你这么困惑?

答案 1 :(得分:0)

动画块和完成块之间的区别

动画块中的代码称为循环。如果在动画块中设置了视图的帧更改,它将作为动画执行,需要一段时间来执行您可以配置的代码。但是如果你在完成块中设置此视图的帧更改,这将在动画完成后单次执行。