UIView animatewithduration 在 iOS 7 上跳过动画,但在 iOS 8 上运行良好

Posted

技术标签:

【中文标题】UIView animatewithduration 在 iOS 7 上跳过动画,但在 iOS 8 上运行良好【英文标题】:UIView animatewithduration skips animation on iOS 7 but works fine on iOS 8 【发布时间】:2015-02-09 10:23:47 【问题描述】:

我正在开发一个应用程序,该应用程序有一个带有四个磁贴的旋转轮作为菜单。如果用户在***上选择未朝下的瓷砖,则***将自动旋转以使该瓷砖面朝下。然后它继续选择自己,依此类推。这是客户要求的。 The problem is that when tile 1 (with a rotation value of M_PI) is selected it skips the slow steady animation, that otherwise works perfectly on ios 8 and for the other tiles with different rotation values, and instead jumps.

总结一下:animationDuration 设置为 M_PI 时,它在 iOS7 上的行为很奇怪。不是 8。

这里有一些代码:

 [UIView animateWithDuration:animationDuration
                      delay:0.0f
                    options:UIViewAnimationOptionCurveEaseOut
                 animations:^
                     wheel.container.transform = CGAffineTransformMakeRotation(rotation);
                 
                 completion:^(BOOL finished)
                   //completion code                         
                 
 ];

【问题讨论】:

请参考***.com/questions/19922752/… 我看过了。无法真正将其翻译成我可以使用的任何东西。 :-( 【参考方案1】:

它也可能与数据类型有关,例如 M_PI 是 double 或 float。还有旋转是如何计算的,它的数据类型是什么 -

我曾经也遇到过类似的问题,我将 M_PI 中小数点后的位数限制在 6 左右(如 #define M_PI_S 3.141592),这对我有用。

至少你试试这个,一旦它可以工作。

我把代码写成

#define M_PI_S   3.141592   /* pi */
#define DEGREES_TO_RADIANS(angle) (angle / 180.0 * M_PI_S)

- (void)rotateImage:(UIImageView *)image duration:(NSTimeInterval)duration curve:(int)curve degrees:(CGFloat)degrees

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:duration];
    [UIView setAnimationCurve:curve];
    [UIView setAnimationBeginsFromCurrentState:YES];

    CGAffineTransform transform =
    CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(degrees));
    image.transform = transform;

    [UIView commitAnimations];

并将函数称为 -

[self rotateImage:variationCell.m_helpImage duration:0.25
                            curve:UIViewAnimationCurveEaseIn degrees:90];

【讨论】:

我不得不稍微修改一下您的建议,因为我正在旋转 UIView 而不是 imageview。此外,特定对象没有 m_helpImage。我能够构建和运行它,但遗憾的是它没有修复它。旋转实际上完全停止了。我用适当的值调用您的函数替换了我发布的内容,但由于某种原因,它根本不起作用。也许我应该再试一次。 感谢修改和尝试,我刚刚发布了示例代码(我在我的项目中使用了这个)

以上是关于UIView animatewithduration 在 iOS 7 上跳过动画,但在 iOS 8 上运行良好的主要内容,如果未能解决你的问题,请参考以下文章

在 UIView2 上方显示 UIView1,但在 UIView1 上方显示 UIView2 输入方式

统计从多个 UIView 中随机抽出的 UIView 数量,即:从 9 个 UIView 中随机抽出 5 个 UIView,然后执行操作

UIView 类别 - 自定义方法不返回 UIView

IOS将UIVIew中的UIImageView扁平化为单个UIView [重复]

UIView - 啥覆盖将允许更新 UIView 框架

UIView 中的 UIView 问题