使用CGAffineTransformMakeScale的UIView动画会立即使用十进制数更改大小

时间:2013-12-03 03:21:45

标签: ios uiview cgaffinetransform uiviewanimationtransition

- (void)startAnimation {
//reverse - shrinking from full size
    if (_reversed == YES) {
        //self.transform = CGAffineTransformMakeScale(1.0, 1.0);
        [UIView animateWithDuration:1.0f delay:0.0f options:UIViewAnimationOptionCurveLinear animations:^{
            self.transform = CGAffineTransformMakeScale(0.1, 0.1); //this line does it instantly
            self.alpha = 0;
        } completion:^(BOOL finished) {
            [self removeFromSuperview];
        }];
    } else {
//non reverse - expanding from middle
        self.transform = CGAffineTransformMakeScale(0.001, 0.001);
        [UIView animateWithDuration:1.0f delay:0.0f options:UIViewAnimationOptionCurveLinear animations:^{
            self.transform = CGAffineTransformMakeScale(1.0, 1.0);
            self.alpha = 0;
        } completion:^(BOOL finished) {
            [self removeFromSuperview];
        }];
    }
}

非反向代码确实可以正常工作,但是当我执行_reversed == YES位时,动画块内的转换会立即发生。如果我评论该行代码,那么视图保持正确的大小,但是如果我取消注释它然后它立即缩小但是alpha仍然执行淡入淡出动画。为什么会这样?

编辑:我弄清楚发生了什么,但我不知道如何解决它。视图确实做动画,只有视图的大小立即改变,但它仍然“滑动”到中心,好像它正在缩小(你看到的只是一个向中间滑动的小矩形,好像它是左上角的一样)物体)。如果我首先将视图缩放到2,然后缩小到1,动画可以正常工作,只有当它从1到十进制数时才能正常工作。我还使用了draw rect来创建一个带有核心图形的对象,并且转换问题会影响它,但如果设置了背景颜色则不会影响实际帧。

1 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,在使用CGAffineTransformMakeScale进行变换变换动画之前,视图的位置会突然跳跃。我注意到“跳跃”的大小似乎与动画后期出现的缩放成比例。

我可以通过在viewWillLayoutSubviews()覆盖中找到它来解决这个问题,我正在设置动画视图的框架。通常,不要设置具有非标识转换的视图帧。所以在viewWillLayoutSubviews()覆盖中,我设置了视图的边界和layer.position,现在动画像丝绸一样光滑。