使用CGAffineTransformMakeScale的UIViewanimation以十进制数字立即改变大小

- (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位时,animation块内部的转换立即发生。 如果我评论这行代码,那么视图保持正确的大小,但是如果我取消注释,那么它立即收缩,但alpha仍然做淡出animation。 为什么会这样呢?

编辑:我想清楚发生了什么,但我不知道如何解决它。 视图没有做animation,只有视图的大小立即变化,但它仍然“滑入”中心,就像它缩小一样(你看到的只是一个小的矩形滑到中间,就好像它是左上angular物体)。 如果我首先将视图缩放到2,然后缩小到1,则animation工作正常,只有从1到十进制数字时,它才起作用。 此外,我用绘制矩形创build核心graphics和转换问题的影响,但不是实际的框架,如果设置的背景颜色。

我遇到了一个类似的问题,在用CGAffineTransformMakeScale进行变换的animation之前,视图的位置会突然跳跃。 我注意到“跳跃”的大小似乎与稍后在animation中发生的缩放成比例。

我可以通过在viewWillLayoutSubviews()重写中find这个问题来解决这个问题,我设置了animation视图的框架。 通常,不要设置将具有非标识转换的视图帧。 所以在viewWillLayoutSubviews()覆盖中,我设置了视图的边界和layer.position,现在animation就像丝绸一样平滑。