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,然后执行操作