【问题标题】:Animate UIView scale to zero动画 UIView 缩放为零
【发布时间】:2011-10-29 06:31:15
【问题描述】:

我无法将视图的比例设置为零。这是我的代码:

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

}];

由于某种原因,视图水平拉伸和挤压,就像旧电视管关闭一样。如果我改为将比例改为(0.1, 0.1),它会正确缩放,但当然不会直到零。

为什么会这样?

【问题讨论】:

  • 我还是有同样的问题,你找到解决办法了吗?

标签: iphone objective-c ios ipad


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    如果有人仍然有这个问题,问题在于仿射变换矩阵对于零比例因子不是唯一的 - 没有办法知道如何在初始矩阵和零矩阵之间“正确”插值,所以你会得到你描述的奇怪的效果。

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

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

    【讨论】:

      【解决方案3】:

      试试:

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

      【讨论】:

      • 谢谢,但如果可能的话,我真的很想使用转换。视图内容层次结构非常复杂,我必须检查每个子视图的自动调整掩码属性才能正确调整大小。
      【解决方案4】:

      请使用:

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

      【讨论】:

      • 我想你的意思是myView.transform
      • 无法为缩放变换设置动画到 (0.0, 0.0)
      猜你喜欢
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      相关资源
      最近更新 更多