在iOS动画中获取当前帧

时间:2014-08-13 17:14:01

标签: ios objective-c animation uiimageview core-animation

这是我的代码:

-(void)play {
    animation = [CAKeyframeAnimation animationWithKeyPath: @"contents"];
    for (UIImage *image in folder.images) {
        [images addObject:(id)image.CGImage];
    }
    animationArray = [images subarrayWithRange:NSMakeRange(selected, selectedEnd - selected)];
    timeBetweenAnimation = 1.0/framesPerSecond;
    totalAnimationTime = folder.images.count * timeBetweenAnimation;
    animation.duration = totalAnimationTime;
    animation.values = animationArray;
    animation.delegate = self;
    beforeAdd = CACurrentMediaTime();
    [displayImage.layer addAnimation:animation forKey:@"contents"];
    afterAdd = CACurrentMediaTime();
}

-(void)animationDidStart {
    afterStart = CACurrentMediaTime();
}

我正在使用Core Animation为图像数组制作动画,我希望在暂停图像时获取动画中的当前图像。我意识到这样做的方法是使用时间比(播放时间/总持续时间)从“animationArray”获取图像,但我无法捕获开始时间。我已经尝试使用CACurrentMediaTime(),在调用addAnimation:forKey之前和之后捕获开始时间,并且在动画开始之后也是如此,但它是不准确的(特别是当我有大量图像时)。对于更大的图像阵列,“beforeAdd”和“afterAdd”时间至少是第二次关闭。此外,“afterStart”在.04和.08秒之间的任何位置,与我的图像数组的大小无关。

在最糟糕的情况下,我可以使用“afterStart”开始时间。但是,如果我试图在1秒钟内制作100张图像,使用此方法获取图像将会导致4帧不准确。因此,我要么需要一个不使用时序的方法来获取动画的当前帧,或者我需要一种方法来获得更准确的开始时间。这可能吗?

注意:我不想使用UIImageView动画来执行此操作,因为该动画技术在帧之间没有平滑过渡。如果有一种方法可以使用UIImageView动画在帧之间进行平滑过渡,我会重新考虑,虽然我很确定在计算开始时间时仍然存在问题。

0 个答案:

没有答案