ios – 使用UIImageView动画创建平滑动画

ios – 使用UIImageView动画创建平滑动画,第1张

概述我目前正在制作4张图像,如下所示: UIImageView *tom3BeforeImage;tom3Images = [NSArray arrayWithObjects: [UIImage imageNamed:@"floortom_before1.png"],[UIImage imageNamed:@"floortom_before2.png"],[UIImage imageNamed:@" 我目前正在制作4张图像,如下所示:

UIImageVIEw *tom3BeforeImage;tom3Images = [NSArray arrayWithObjects: [UIImage imagenamed:@"floortom_before1.png"],[UIImage imagenamed:@"floortom_before2.png"],[UIImage imagenamed:@"floortom_before3.png"],[UIImage imagenamed:@"floortom_before4.png"],nil ];tom3BeforeImage.animationImages = tom3Images;tom3BeforeImage.animationDuration = 0.75;[tom3BeforeImage startAnimating];

它工作正常,除了动画在图像之间波动.我需要持续时间精确到0.75秒,所以加速它不是一个选择.

让动画在图像之间更平滑的最佳方法是什么,有点像每个图像之间的混合变化?

谢谢!

解决方法 如果您正在使用基于帧的UIImageVIEw动画,并且动画必须是0.75秒,那么我知道的唯一方法是使其更流畅是创建更多帧.尝试30帧/秒,或约22帧.这应该给予非常平稳的动作.

如果你想在帧之间进行某种交叉溶解,那么你将无法使用UIVIEw帧动画.你将不得不使用UIVIEw块动画(使用animateWithDuration:动画:或其堂兄弟.)

您可以在帧之间创建一系列交叉溶解,其中序列的总持续时间为.75秒.让每个转换触发其完成块中的下一个转换.

像这样的东西:

您将需要2个图像视图,堆叠在彼此之上.你会同时淡出一个,另一个淡入淡出.您需要在两者上将opaque标志设置为NO.

让我们称它们为tom3BeforeImage1和tom3BeforeImage2

添加一个int实例变量imageCount并创建您的图像数组,tom3Images和实例变量:

- (voID) animateImages;{  CGfloat duration = .75 / ([tom3Images count] -1);  //Start with the current image fully visible in tom3BeforeImage1  tom3BeforeImage1.image = tom3Images[imageCount];  tom3BeforeImage1.Alpha = 1.0;  //Get the next image ready,at Alpha 0,in tom3BeforeImage2  tom3BeforeImage2.image = tom3Images[imageCount+1];  tom3BeforeImage2.Alpha = 0;  imageCount++  [UIVIEw animateWithDuration: duration      delay: 0     options: UIVIEwAnimationoptionCurvelinear    animations:    ^{      //Fade out the current image       tom3BeforeImage1.Alpha = 0.0;       //Fade in the new image       tom3BeforeImage2.Alpha = 1.0;    }    completion:    ^{    //When the current animation step completes,trigger the method again.    if (imageCount < [tom3Images count] -1)       [self animateImages];    }  ];}

请注意,我在论坛编辑器中没有喝足够的咖啡就把上面的代码搞砸了.它可能包含语法错误,甚至可能存在逻辑问题.这只是为了让你思考如何做到这一点.

编辑#2:

我不确定为什么,但我决定将其充实为一个完整的示例项目.上面的代码在调试后可以很好地工作,但是由于它在同一时间淡出一个图像,它正在淡化另一个图像,两个图像视图背后的背景显示出来.

我将其重新设计为具有仅消除顶部图像的逻辑.它将第一帧放在顶部图像视图中,将第二帧放在底部图像视图中,然后淡出顶部图像视图.

该项目在github上进行,名为Animate-Img.(链接)

然后它在顶部图像视图中安装第三帧并将其淡入IN,

然后它在底部图像视图中安装第4个名称并淡出顶部以暴露底部等等.

我最终创建了一个通用方法

- (voID) animateImagesWithDuration: (CGfloat) totalDuration                           reverse: (BOol) reverse                         crossfade: (BOol) doCrossfade               withCompletionBlock: (voID (^)(voID)) completionBlock;

它会将一组图像设置为一对图像视图,可选择在动画完成后将其反转.它需要一个动画完成后调用的完成块.

动画按钮实际上调用重复整个动画序列的方法.它目前设置为仅运行一次,但是如果需要,更改常量将使程序重复整个序列.

总结

以上是内存溢出为你收集整理的ios – 使用UIImageView动画创建平滑动画全部内容,希望文章能够帮你解决ios – 使用UIImageView动画创建平滑动画所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1065812.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存