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动画创建平滑动画所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)