这篇文章给大家分享的是有关iOS怎么实现序列动画的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
我们提供的服务有:网站设计、成都做网站、微信公众号开发、网站优化、网站认证、宽城ssl等。为上千多家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的宽城网站制作公司前言
我们的在做动效中经常会有这样的需求,A动画执行完,执行B动画,B动画执行完执行C动画这样的序列,比如如下效果:
iOS 10之前,我们可能这样实现这个动画序列,实际上可能你现在的代码就是这样写的:
UIView.animate()
提供了一个完成block回调,我们可以用它来触发下一个动画。这样做,我们可以实现这个动画。正如你可以看到的,这坨代码的主要缺点是丑陋,几乎没有可读性。
UIViewPropertyAnimator
iOS10引入了UIViewPropertyAnimator ,基于篇幅原因,这里不对其做详细介绍,如果需要读者请自行补脑。我关心的是如何提高这类多层嵌套代码的可读性,通过UIViewPropertyAnimator,前面的代码片断将成为:
通过上面的方式我们可以将动画定义分离开来,这样不仅有更好的可读性,还可以解耦。这样已经比开始的代码漂亮多了,但是我们还可以写的更好...
Reactive animation chaining
我是一个rx的重度用户,我首先想到的是:是否有办法让UIViewPropertyAnimation与RxSwift兼容?
大概思路是观察一个动画的状态,然后触发下一个,接下来我们通过扩展UIViewPropertyAnimation来实现 扩展会有封装UIViewPropertyAnimator的“startAnimation”和“addCompletion”机制。它将返回的可观察的状态。但是为了简单起见,我们假定一个动画只能“complete”,没有“stream”管理(如onNext、onSubscribed onDisposed等等)。
Talk is cheap,Show me the code
上面动画扩展返回一个 Completable状态 ,订阅时,将开始动画和添加完成回调,发送一个“.completed”事件。目的很简单:当完成动画,开始执行下一个开始动画,代码如下。
按理说写到这里应该结束了,但是可能有读者说,我们并没有引入RX,没错你的代码很优雅,然而对我们来说成本有点高,那么就继续讲讲其他的方案,总有一款适合你。
自定义操作符
我们都知道Swift有很cool的特性:自定义操作符,我们总希望把代码些简单,让别的同事看自己的代码时一目了然,都不需注释就懂什么意思,比如:
animation1 ~> animation2 ~> animation3 ~> animation4
很简单,自定义~>操作符如下:
接下来使用这个操作符实现动画
好了,自此关于如何避免写出丑陋的嵌套动画代码写完了,enjoy
感谢各位的阅读!关于“iOS怎么实现序列动画”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。