将UIView缩放动画到零

16

我正在尝试将一个视图的缩放动画到零,但是遇到了麻烦。这是我的代码:

[UIView animateWithDuration:0.3 animations:^{
    myView.transform = CGAffineTransformMakeScale(0.0, 0.0);
} completion:^(BOOL finished){

}];

出于某种原因,视图在水平方向上像旧电视机管关闭一样伸缩。如果我将比例设置为(0.1, 0.1),则可以正确地缩放,但当然不会缩放到零。

这是为什么?


我仍然遇到同样的问题,你找到解决方案了吗? - Rodrigo Ruiz
4个回答

17

如果还有人感兴趣,这是我所做的(使用Swift)让它(几乎)工作:

UIView.animate(withDuration: 1) {
    myView.transform = CGAffineTransform(scaleX: 0.01, y: 0.01)
}

如果持续时间较短,则无法看到它未完全缩小并且会逐渐消失。


6

如果还有人遇到这个问题,问题在于仿射变换矩阵在零缩放因子时不是唯一的——无法确定如何在初始矩阵和零矩阵之间“适当”地插值,因此会出现您所描述的奇怪效果。

解决方法很简单,只需使用微小但非零的缩放值,例如:

[UIView animateWithDuration:0.3
                 animations:^{ myView.transform = CGAffineTransformMakeScale(0.01, 0.01); }
                 completion:nil];

4

尝试:

[UIView animateWithDuration:0.3 animations:^{
    myView.frame = CGRectMake(myView.origin.x, myView.origin.y, 0.0, 0.0);
} completion:^(BOOL finished){
}];

2
谢谢,但是如果可能的话我真的想使用transform。视图内容层次结构相当复杂,我必须通过每个子视图的自动调整大小属性来正确调整大小。 - pixelfreak

3

请使用:

myView.layer.transform = CGAffineTransformMakeScale(0.0, 0.0);

2
我认为你的意思是 myView.transform - Webdevotion
1
无法对比例变换进行动画处理至 (0.0, 0.0)。 - Desmond DAI

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接