【问题标题】:CGAffineTransformMakeScale animation not workingCGAffineTransformMakeScale 动画不起作用
【发布时间】:2014-09-03 20:37:01
【问题描述】:

我有一个视图控制器,我使用 UIView 动画将其缩小到 0,然后再删除它。我解除它的代码是:

[UIView animateWithDuration:_dismissAnimationDuration
                      delay:0.0
                    options:UIViewAnimationOptionCurveEaseIn
                 animations:^(void) {
                     _menuContainerView.transform = CGAffineTransformMakeScale(0.0, 0.0);
                 }
                 completion:^(BOOL finished){
                     if ([_delegate respondsToSelector:@selector(popUpMenuDidClose)])
                     {
                         [_delegate popUpMenuDidClose];
                     }

                     [self.view removeFromSuperview];
                     [self removeFromParentViewController];
                 }];

当从 XCode 5 构建到同时运行 iOS 7 和 iOS 8 的设备上时,这非常有效。但是,当我从 XCode 6(beta 6 和 beta 7)构建到 iOS 8 时,视图只会被切掉而不是动画。如果在我将目标比例更改为 (0.001, 0.001) 时这还不够奇怪,那么无论 XCode 版本如何,它的动画效果都很好。关于为什么我不能用 XCode 6 动画到实际 (0.0, 0.0) 比例的任何想法?

【问题讨论】:

  • 我在 iOS8GM 上遇到了同样的问题......不知道如何解决这个问题。

标签: ios objective-c iphone xcode animation


【解决方案1】:

因此,在与 Apple 的一位开发人员交谈后,我得到的理由是,一些基本框架需要经常处理变换矩阵的逆矩阵,并且由于零矩阵没有逆矩阵,因此动画只是返回以避免崩溃。希望这篇文章对遇到类似情况的其他人有所帮助。

【讨论】:

  • 我认为由此我们可以推断出解决方案将是@guptron 提出的解决方案,方法是设置一个非零值,如 CGAffineTransformMakeScale(0.01, 0.01);它肯定对我有用,谢谢
  • 这不是一个解决方案,那是一个 hack...Apple 是否打算修复该错误?
  • @RodrigoRuiz 这并不完全是一个错误,所以我不相信他们有计划改变缩放的工作方式。我也不会根据底层数学的工作原理将非零矩阵的缩放称为黑客攻击
  • 我理解关于它背后的数学的评论,但是,你不能动画到零比例是没有意义的。
【解决方案2】:

如果您可以接受,请将比例值设置为 0.01,如下所示:

_menuContainerView.transform = CGAffineTransformMakeScale(0.01, 0.01);

Reference

【讨论】:

  • 这可能为我节省了数小时的挫败感。我使用 (0,0) 的代码在使用 obj-c 的 xcode 中运行良好,但在我的 Xamarin 代码中我必须使用 (0.01f, 0.01f)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-20
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多