这是我的代码:
-(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动画在帧之间进行平滑过渡,我会重新考虑,虽然我很确定在计算开始时间时仍然存在问题。