iPhone动画问题SImulator vs Real Device

Luk*_*asz 2 iphone cocoa-touch core-animation

这是我的第一个问题,所以请保持温柔:我在动画模拟器和真实设备上顺利运行动画代码(我在iPhone 3GS 3.1.2上测试).动画是两个视图之间的简单过渡,类似于书页翻页.

模拟器和真实设备之间的差异(我无法研究的问题 - 解决)是在动画完成时在真实设备上 - 旋转完成之后动画视图闪烁(显示为分秒),然后隐藏它.在模拟器上,这种"意外"眨眼不会发生.

这是动画代码:

-(void)flip{
    UIView *animatedView;

    // create an animation to hold the page turning
    CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath:@"transform"];
    transformAnimation.removedOnCompletion = NO;
    transformAnimation.delegate = self;
    transformAnimation.duration = ANIMATION_TIME;
    transformAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

    // this is the basic rotation by 90 degree along the y-axis
    CATransform3D endTransform = CATransform3DMakeRotation(3.141f/2.0f,
                                                           0.0f,
                                                           -1.0f,
                                                           0.0f);
    // these values control the 3D projection outlook
    endTransform.m34 = 0.001f;
    endTransform.m14 = -0.0015f;


    // start the animation from the current state
    transformAnimation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
    transformAnimation.toValue = [NSValue valueWithCATransform3D:endTransform];
    animatedView = screenShot;

    // Create an animation group to hold the rotation and possibly more complex animation in the future
    CAAnimationGroup *theGroup = [CAAnimationGroup animation];

    // Set self as the delegate to receive notification when the animation finishes
    theGroup.delegate = self;
    theGroup.duration = ANIMATION_TIME;
    // CAAnimation-objects support arbitrary Key-Value pairs, we add the UIView tag
    // to identify the animation later when it finishes
    [theGroup setValue:[NSNumber numberWithInt:animatedView.tag] forKey:@"animated"];
    // Here you could add other animations to the array
    theGroup.animations = [NSArray arrayWithObjects:transformAnimation,nil];
    theGroup.removedOnCompletion = NO;
    // Add the animation group to the layer
    if (animatedView.layer.anchorPoint.x != 0.0f) 
    {
        animatedView.layer.anchorPoint = CGPointMake(0.0f, 0.5f);
        float yy = animatedView.center.x - (animatedView.bounds.size.width / 2.0f);
        animatedView.center = CGPointMake(yy, animatedView.center.y);
    }

    if(![animatedView isDescendantOfView:self.view])[self.view addSubview:animatedView];
    screenShot.hidden = NO;
    animatedView.hidden = NO;


    [animatedView.layer addAnimation:theGroup forKey:@"flip"];

}

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {

    screenShot.hidden = YES;

}
Run Code Online (Sandbox Code Playgroud)

Bra*_*son 5

尝试将Group和/或transformAnimation的fillMode设置为kCAFillModeForwards:

theGroup.fillMode = kCAFillModeForwards;
Run Code Online (Sandbox Code Playgroud)

这应该会导致动画在活动持续时间结束后保持不变.我之前用它来删除动画结束的闪烁.