时间:2021-05-20
前言
我们的在做动效中经常会有这样的需求,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
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
ios动画实例详解ios动画的实现方式多种多样,这里就只记录一下beginanimations:context。在你调用beginanimations:cont
序列帧动画经常用到,最直接的方式就是用Animation录制。但某些情况下这种方式并不是太友好,需要靠代码的方式进行序列帧动画的实现。代码实现序列帧动画,基本的
当我们需要制作动态炫酷科技感很强的UI时,美术一般会给我们提供一些序列图,这时候我们只需在程序里实现序列动画。一.动画机unity自带的帧动画机很方便,我们首先
ios中uiimageview方法实现简单动画查阅uiimageview文档时,发现uiimageview有一组关于动画的方法/参数,可以实现简单的动画。包括:
iOS动画来模拟音量振动条,即利用CAReplicatorLayer实现,以下将详细的介绍CAReplicatorLayer和实现方法。音量振动条效果图:如何实