iOS 优雅地实现序列动画

栏目: IOS · 发布时间: 6年前

内容简介:我们的在做动效中经常会有这样的需求,A动画执行完,执行B动画,B动画执行完执行C动画这样的序列,比如如下效果:iOS 10之前,我们可能这样实现这个动画序列,实际上可能你现在的代码就是这样写的:

我们的在做动效中经常会有这样的需求,A动画执行完,执行B动画,B动画执行完执行C动画这样的序列,比如如下效果:

iOS 优雅地实现序列动画

iOS 10之前,我们可能这样实现这个动画序列,实际上可能你现在的代码就是这样写的:

iOS 优雅地实现序列动画

UIView.animate()提供了一个完成block回调,我们可以用它来触发下一个动画。这样做,我们可以实现这个动画。正如你可以看到的,这坨代码的主要缺点是丑陋,几乎没有可读性。

UIViewPropertyAnimator

iOS10引入了UIViewPropertyAnimator ,基于篇幅原因,这里不对其做详细介绍,如果需要读者请自行补脑。我关心的是如何提高这类多层嵌套代码的可读性,通过UIViewPropertyAnimator,前面的代码片断将成为:

iOS 优雅地实现序列动画

通过上面的方式我们可以将动画定义分离开来,这样不仅有更好的可读性,还可以解耦。这样已经比开始的代码漂亮多了,但是我们还可以写的更好...

Reactive animation chaining

我是一个rx的重度用户,我首先想到的是:是否有办法让UIViewPropertyAnimation与RxSwift兼容?

大概思路是观察一个动画的状态,然后触发下一个,接下来我们通过扩展UIViewPropertyAnimation来实现 扩展会有封装UIViewPropertyAnimator的“startAnimation”和“addCompletion”机制。它将返回的可观察的状态。但是为了简单起见,我们假定一个动画只能“complete”,没有“stream”管理(如onNext、onSubscribed onDisposed等等)。

Talk is cheap,Show me the code

iOS 优雅地实现序列动画

上面动画扩展返回一个 Completable状态 ,订阅时,将开始动画和添加完成回调,发送一个“.completed”事件。目的很简单:当完成动画,开始执行下一个开始动画,代码如下。

iOS 优雅地实现序列动画

按理说写到这里应该结束了,但是可能有读者说,我们并没有引入RX,没错你的代码很优雅,然而对我们来说成本有点高,那么就继续讲讲其他的方案,总有一款适合你。

自定义操作符

我们都知道Swift有很cool的特性:自定义操作符,我们总希望把代码些简单,让别的同事看自己的代码时一目了然,都不需注释就懂什么意思,比如:

animation1 ~> animation2 ~> animation3 ~> animation4

很简单,自定义~>操作符如下:

iOS 优雅地实现序列动画

接下来使用这个操作符实现动画

iOS 优雅地实现序列动画

好了,自此关于如何避免写出丑陋的嵌套动画代码写完了,enjoy

--END--

#iOSTips 周报#1|2018-12-10

上周六首次尝试发周报,没想到竟然用了要收费的短链接,真的尴尬后台很多问号脸,这里重发一下,微信公众号不支持外链, 点击 阅读原文 可跳转对应的外链。

【资讯】

App Store Connect will be on vacation December 23 to 27 (Pacific Time)

每年惯例,Appstore将在12月23至27日停止App审核

Flutter 1.0 正式版: Google 的便携 UI 工具包

Flutter 是 Google 为您打造的 UI 工具包,帮助您通过一套代码同时在 iOS 和 Android 上构建媲美原生体验的精美应用!

连续2周免费榜第一的ZEPETO刷爆朋友圈

一个ins捏脸软件最近突然爆红,这是一款可自定义捏人偶制作表情的客户端应用,叫做《Zepeto》,这款软件能让平面变立体,将虚拟变实物,全新视角,多样玩法,神奇体验。

【热文】

iOS App冷启动治理:来自美团外卖的实践

冷启动时长是App性能的重要指标,作为用户体验的第一道“门”,直接决定着用户对App的第一印象,本文分享了美团iOS端冷启动的治理经验。

Implementing features with ReactiveFeedback

本文作者通过一个实例演示来介绍他们团队写的单向数据流应用框架 ReactiveFeedback。由于作者所在团队用的是 ReactiveCocoa,所以他们就基于 ReactiveSwift 自己实现了一套类似 RxFeedback 的框架。

The Right Way to Architect iOS App with Swift

来自limboy大神介绍了对iOS 架构的看法与自己的思考

【源码】

RichTextView

iOS Text View (UIView) that Properly Displays LaTeX, HTML, Markdown, and YouTube/Vimeo Links

Marionette

Swift library which provides a high-level API to control a WKWebView

iOS 优雅地实现序列动画


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

运营有道:重新定义互联网运营

运营有道:重新定义互联网运营

李明轩 / 机械工业出版社 / 2017-7-31 / 69.00元

本书是前百度资深运营专家多年运营经验的总结,是作者运营千万级用户规模的大型互联网产品的实操经验复盘,是作者在“在行”上为近百位CEO和高管提供互联网运营咨询服务后对互联网运营需求的深入洞见。 本书的思想基础是“运营必须以用户为中心”,从产品、用户、市场3个维度对互联网运营重新进行了系统性的梳理:从道的层面解读并重新定义运营方法论,从术的层面围绕方法论提出行之有效的解决方法和实际案例。重点不在......一起来看看 《运营有道:重新定义互联网运营》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试