动画UIView缩放为零

pix*_*eak 11 iphone objective-c ipad ios

我无法将视图的缩放设置为零.这是我的代码:

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

}];
Run Code Online (Sandbox Code Playgroud)

出于某种原因,视图会像旧电视管关闭一样水平拉伸和挤压.如果我改变比例尺(0.1, 0.1),它会正确缩放,但当然不是零.

为什么会这样?

Sko*_*oua 13

如果有人仍然感兴趣,这就是我所做的(在Swift中)使其工作(几乎):

UIView.animateWithDuration(1, animations: {
    myView.transform = CGAffineTransformMakeScale(0.01, 0.01)
}, completion: nil)
Run Code Online (Sandbox Code Playgroud)

如果持续时间很短,则不会看到它不会精确缩放到0并且它会有效地消失.


del*_*rux 5

万一仍有问题,问题在于仿射变换矩阵对于比例因子零不是唯一的–无法知道如何在初始矩阵和零矩阵之间进行“适当”插值,因此获得您所描述的怪异效果。

解决方案是简单地使用较小但非零的比例值,例如

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


Kev*_*tre 4

尝试:

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

  • 谢谢,但如果可能的话我真的想使用转换。视图内容层次结构非常复杂,我必须遍历每个子视图的自动调整大小蒙版属性才能正确调整大小。 (2认同)