我需要为图像设置动画。我有大量图像,这需要作为视频播放。在播放之间有时我需要更改一些图像,因为它们将在服务器上更新。所以播放应该会自动更新这个新图像。
我尝试过使用 UIImageView。在那里我们无法控制动画。然后我尝试 CAKeyframeAnimation 为 values 属性提供图像数组。我可以播放和暂停动画。但在这里我也不能在播放时动态更改图像。
谁能帮我解决这个问题。
谢谢米娅
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];
}];
}
使用两个UIImageViews
并交换它们。
如果您对“动画”有弱引用UIView
,请务必检查动画是否已在完成块中完成。否则,当您导航到另一个视图时,您可能会遇到性能问题,对动画方法的递归调用将继续!
- (void)animateImagesAtIndex:(NSNumber *)imageIdx {
// Do something here
[UIView animateWithDuration:1 animations:^{
// Do swap
}
completion:^(BOOL finished) {
if (finished) {
[self animateImagesAtIndex:imageIdx];
}
}];
}
UIImageView 支持一系列图像的动画。您只需使用图像数组设置属性动画图像,并调用方法 startAnimating 和 stopAnimating。