CGAffineTransformMakeScale 动画不起作用

Posted

技术标签:

【中文标题】CGAffineTransformMakeScale 动画不起作用【英文标题】:CGAffineTransformMakeScale animation not working 【发布时间】: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 上遇到了同样的问题......不知道如何解决这个问题。 【参考方案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)

以上是关于CGAffineTransformMakeScale 动画不起作用的主要内容,如果未能解决你的问题,请参考以下文章