UIView animatewithduration在iOS 7上跳过动画但在iOS 8上运行正常

时间:2015-02-09 10:23:48

标签: ios objective-c uiview rotation

我正在使用一个带有四个瓷砖作为菜单的旋转轮的应用程序。如果用户在车轮上拾取未朝下的瓷砖,则会自动旋转以使该瓷砖面朝下。然后它继续选择自己,依此类推。这是客户要求的。问题是,当选择了拼贴1(旋转值为M_PI)时,它会跳过缓慢稳定的动画,否则在iOS 8和其他具有不同旋转值的拼贴上都会完美地运行,而是跳转。

总结一下:在animationDuration设置为M_PI的情况下,它在iOS7上表现得非常奇怪。不是8。

以下是一些代码:

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

1 个答案:

答案 0 :(得分:0)

它也可能与数据类型有关,如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];