iOS如何优雅地实现序列动画详解

 更新时间:2018年12月12日 09:51:59   作者:老峰  
这篇文章主要给大家介绍了关于iOS如何优雅地实现序列动画的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

我们的在做动效中经常会有这样的需求,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开发中时间转换的方法集锦

    ios开发中时间转换的方法集锦

    这篇文章主要介绍了ios开发中时间转换的方法集锦,需要的朋友可以参考下
    2015-05-05
  • iOS实现app间跳转功能

    iOS实现app间跳转功能

    这篇文章主要为大家详细介绍了iOS实现app间跳转功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • iOS App中实现播放音效和音乐功能的简单示例

    iOS App中实现播放音效和音乐功能的简单示例

    这篇文章主要介绍了iOS App中实现播放音效和音乐功能的简单示例,示例代码为传统的Objective-C,需要的朋友可以参考下
    2016-03-03
  • iOS中NSNumberFormatter的介绍与用法

    iOS中NSNumberFormatter的介绍与用法

    NSNumberFormatter 应该可以满足你对数据形式的一般需求,值得了解一下,下面这篇文章主要给大家介绍了关于iOS中NSNumberFormatter的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-09-09
  • 简介iOS开发中应用SQLite的模糊查询和常用函数

    简介iOS开发中应用SQLite的模糊查询和常用函数

    这篇文章主要介绍了iOS开发中应用SQLite的模糊查询和常用函数,SQLite是一个可作嵌入式的数据库非常适合小型应用使用,需要的朋友可以参考下
    2015-12-12
  • iOS把图片缓存到本地的几种方法(总结)

    iOS把图片缓存到本地的几种方法(总结)

    下面小编就为大家分享一篇iOS把图片缓存到本地的几种方法总结,具有很的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • ios 实现倒计时的两种方式

    ios 实现倒计时的两种方式

    这篇文章主要介绍了ios实现倒计时的两种方式,第一种方式使用NSTimer来实现,第二种方式使用GCD来实现。具体内容详情大家参考下本文
    2017-01-01
  • iOS实现聊天输入框功能

    iOS实现聊天输入框功能

    大家都经常使用微信聊天功能,在没事的时候就会想微信聊天输入框的实现过程,很无聊吧。今天小编抽空给大家分享iOS实现聊天输入框功能,感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-02-02
  • iOS实现背景高斯模糊效果

    iOS实现背景高斯模糊效果

    这篇文章主要介绍了iOS实现背景高斯模糊效果,代码简单易懂,非常不错,需要的朋友参考下吧
    2016-12-12
  • iOS开发之AssetsLibrary框架使用详解

    iOS开发之AssetsLibrary框架使用详解

    这篇文章主要介绍了iOS开发之AssetsLibrary框架使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09

最新评论