我需要动画图片。我有大量的图像,这需要作为视频播放。在播放之间,有时我需要更改一些图像,因为它们将在服务器上更新。因此,播放应自动更新此新图像。
我尝试过使用UIImageView。在那里我们无法控制动画。 然后我尝试将CAKeyframeAnimation提供给values属性。我可以播放和暂停动画。但是在这里我也无法在播放时动态改变图像。
任何人都可以帮我解决这个问题。
由于 mia
答案 0 :(得分:0)
UIImageView上的动画系统非常有限。我建议您使用2图像视图制作自己的实现。
您可以使用UIView animateWithDuration
我为你写了一个方法。请注意:我没有测试过。
它假设你的框架在一个名为'frames'的数组中,并且有两个UIIMageView
放在彼此的顶部,称为'imgv1'和'imgv2'
-(void)performAnimationOfFrameAtIndex:(NSNumber*)indexNum
{
int index = [indexNum intValue];
if(index >= frames.count)
{
return;
}
UIImage *img = [frames objectAtIndex:index];
UIImageView *imgIn;
UIImageView *imgOut;
if(index % 2 == 0)
{
imgIn = imgv1;
imgOut = imgv2;
}
else {
imgIn = imgv2;
imgOut = imgv1;
}
imgIn.image = img;
[self.view sendSubviewToBack:imgIn];
[UIView animateWithDuration:0.1 animations:^{
imgIn.alpha = 1;
imgOut.alpha = 0;
} completion:^(BOOL finished) {
[self performSelectorOnMainThread:@selector(performAnimationOfFrameAtIndex:) withObject:[NSNumber numberWithInt:index+1] waitUntilDone:NO];
}];
}
答案 1 :(得分:0)
使用两个UIImageViews
并交换它们。
如果您对“动画”UIView
有弱引用,请务必检查完成块中是否已完成动画。否则,当您导航到另一个视图时,您可能会遇到性能问题,对动画方法的递归调用将继续!
- (void)animateImagesAtIndex:(NSNumber *)imageIdx {
// Do something here
[UIView animateWithDuration:1 animations:^{
// Do swap
}
completion:^(BOOL finished) {
if (finished) {
[self animateImagesAtIndex:imageIdx];
}
}];
}
答案 2 :(得分:0)
UIImageView支持一系列图像的动画。您只需要使用图像数组设置属性animationImages,并调用方法startAnimating和stopAnimating。