Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 带有CGAffineTransformMakeScale的UIView动画会立即以十进制数字更改大小_Ios_Uiview_Cgaffinetransform_Uiviewanimationtransition - Fatal编程技术网

Ios 带有CGAffineTransformMakeScale的UIView动画会立即以十进制数字更改大小

Ios 带有CGAffineTransformMakeScale的UIView动画会立即以十进制数字更改大小,ios,uiview,cgaffinetransform,uiviewanimationtransition,Ios,Uiview,Cgaffinetransform,Uiviewanimationtransition,非反转代码段确实可以像我预期的那样正常工作,但是当我执行_reversed==YES位时,动画块内的转换会立即发生。如果我对这行代码进行注释,那么视图将保持正确的大小,但是如果我取消注释它,那么它将立即缩小,但alpha仍会进行淡入淡出动画。为什么会发生这种情况 编辑:我知道发生了什么,但我不知道如何修复它。视图确实会制作动画,只有视图的大小会立即改变,但它仍然会“滑动”到中心,就像它正在收缩一样(您看到的只是一个小矩形向中间滑动,就像它是对象的左上角一样)。如果我先将视图缩放到2,然后再缩放到

非反转代码段确实可以像我预期的那样正常工作,但是当我执行_reversed==YES位时,动画块内的转换会立即发生。如果我对这行代码进行注释,那么视图将保持正确的大小,但是如果我取消注释它,那么它将立即缩小,但alpha仍会进行淡入淡出动画。为什么会发生这种情况


编辑:我知道发生了什么,但我不知道如何修复它。视图确实会制作动画,只有视图的大小会立即改变,但它仍然会“滑动”到中心,就像它正在收缩一样(您看到的只是一个小矩形向中间滑动,就像它是对象的左上角一样)。如果我先将视图缩放到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];
        }];
    }
}