Ios 带有CGAffineTransformMakeScale的UIView动画会立即以十进制数字更改大小
非反转代码段确实可以像我预期的那样正常工作,但是当我执行_reversed==YES位时,动画块内的转换会立即发生。如果我对这行代码进行注释,那么视图将保持正确的大小,但是如果我取消注释它,那么它将立即缩小,但alpha仍会进行淡入淡出动画。为什么会发生这种情况Ios 带有CGAffineTransformMakeScale的UIView动画会立即以十进制数字更改大小,ios,uiview,cgaffinetransform,uiviewanimationtransition,Ios,Uiview,Cgaffinetransform,Uiviewanimationtransition,非反转代码段确实可以像我预期的那样正常工作,但是当我执行_reversed==YES位时,动画块内的转换会立即发生。如果我对这行代码进行注释,那么视图将保持正确的大小,但是如果我取消注释它,那么它将立即缩小,但alpha仍会进行淡入淡出动画。为什么会发生这种情况 编辑:我知道发生了什么,但我不知道如何修复它。视图确实会制作动画,只有视图的大小会立即改变,但它仍然会“滑动”到中心,就像它正在收缩一样(您看到的只是一个小矩形向中间滑动,就像它是对象的左上角一样)。如果我先将视图缩放到2,然后再缩放到
编辑:我知道发生了什么,但我不知道如何修复它。视图确实会制作动画,只有视图的大小会立即改变,但它仍然会“滑动”到中心,就像它正在收缩一样(您看到的只是一个小矩形向中间滑动,就像它是对象的左上角一样)。如果我先将视图缩放到2,然后再缩放到1,动画效果会很好,只有当从1变为十进制数字时,它才不起作用。此外,我还使用draw rect创建了一个具有核心图形的对象,变换问题会影响该对象,但如果设置了背景颜色,则不会影响实际帧。我遇到了一个类似的问题,在使用CGAffineTransformMakeScale更改变换动画之前,视图的位置会突然跳转。我注意到“跳跃”的大小似乎与动画后期发生的缩放成正比 我可以通过在viewWillLayoutSubviews()覆盖中设置动画视图的帧来解决此问题。通常,不要设置将进行非标识转换的视图框架。因此,在viewWillLayoutSubviews()覆盖中,我设置了视图的边界和layer.position,现在动画像丝绸一样平滑
- (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];
}];
}
}