欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS如何優(yōu)雅地實(shí)現(xiàn)序列動(dòng)畫詳解

 更新時(shí)間:2018年12月12日 09:51:59   作者:老峰  
這篇文章主要給大家介紹了關(guān)于iOS如何優(yōu)雅地實(shí)現(xiàn)序列動(dòng)畫的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

我們的在做動(dòng)效中經(jīng)常會(huì)有這樣的需求,A動(dòng)畫執(zhí)行完,執(zhí)行B動(dòng)畫,B動(dòng)畫執(zhí)行完執(zhí)行C動(dòng)畫這樣的序列,比如如下效果:


iOS 10之前,我們可能這樣實(shí)現(xiàn)這個(gè)動(dòng)畫序列,實(shí)際上可能你現(xiàn)在的代碼就是這樣寫的:


UIView.animate()提供了一個(gè)完成block回調(diào),我們可以用它來(lái)觸發(fā)下一個(gè)動(dòng)畫。這樣做,我們可以實(shí)現(xiàn)這個(gè)動(dòng)畫。正如你可以看到的,這坨代碼的主要缺點(diǎn)是丑陋,幾乎沒(méi)有可讀性。

UIViewPropertyAnimator

iOS10引入了UIViewPropertyAnimator ,基于篇幅原因,這里不對(duì)其做詳細(xì)介紹,如果需要讀者請(qǐng)自行補(bǔ)腦。我關(guān)心的是如何提高這類多層嵌套代碼的可讀性,通過(guò)UIViewPropertyAnimator,前面的代碼片斷將成為:


通過(guò)上面的方式我們可以將動(dòng)畫定義分離開(kāi)來(lái),這樣不僅有更好的可讀性,還可以解耦。這樣已經(jīng)比開(kāi)始的代碼漂亮多了,但是我們還可以寫的更好...

Reactive animation chaining

我是一個(gè)rx的重度用戶,我首先想到的是:是否有辦法讓UIViewPropertyAnimation與RxSwift兼容?

大概思路是觀察一個(gè)動(dòng)畫的狀態(tài),然后觸發(fā)下一個(gè),接下來(lái)我們通過(guò)擴(kuò)展UIViewPropertyAnimation來(lái)實(shí)現(xiàn) 擴(kuò)展會(huì)有封裝UIViewPropertyAnimator的“startAnimation”和“addCompletion”機(jī)制。它將返回的可觀察的狀態(tài)。但是為了簡(jiǎn)單起見(jiàn),我們假定一個(gè)動(dòng)畫只能“complete”,沒(méi)有“stream”管理(如onNext、onSubscribed onDisposed等等)。

Talk is cheap,Show me the code


上面動(dòng)畫擴(kuò)展返回一個(gè) Completable狀態(tài) ,訂閱時(shí),將開(kāi)始動(dòng)畫和添加完成回調(diào),發(fā)送一個(gè)“.completed”事件。目的很簡(jiǎn)單:當(dāng)完成動(dòng)畫,開(kāi)始執(zhí)行下一個(gè)開(kāi)始動(dòng)畫,代碼如下。

按理說(shuō)寫到這里應(yīng)該結(jié)束了,但是可能有讀者說(shuō),我們并沒(méi)有引入RX,沒(méi)錯(cuò)你的代碼很優(yōu)雅,然而對(duì)我們來(lái)說(shuō)成本有點(diǎn)高,那么就繼續(xù)講講其他的方案,總有一款適合你。

自定義操作符

我們都知道Swift有很cool的特性:自定義操作符,我們總希望把代碼些簡(jiǎn)單,讓別的同事看自己的代碼時(shí)一目了然,都不需注釋就懂什么意思,比如:

animation1 ~> animation2 ~> animation3 ~> animation4

很簡(jiǎn)單,自定義~>操作符如下:


接下來(lái)使用這個(gè)操作符實(shí)現(xiàn)動(dòng)畫


好了,自此關(guān)于如何避免寫出丑陋的嵌套動(dòng)畫代碼寫完了,enjoy

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • iOS中利用CAEmitterLayer實(shí)現(xiàn)粒子動(dòng)畫詳解

    iOS中利用CAEmitterLayer實(shí)現(xiàn)粒子動(dòng)畫詳解

    粒子效果應(yīng)該對(duì)現(xiàn)在很多人來(lái)說(shuō)并不陌生,我們之前也分享了一些相關(guān)文章,下面這篇文章主要給大家介紹了關(guān)于iOS中利用CAEmitterLayer實(shí)現(xiàn)粒子動(dòng)畫的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友們下面來(lái)一起看看吧。
    2017-06-06
  • iOS微信支付交互圖分析

    iOS微信支付交互圖分析

    這篇文章主要為大家詳細(xì)分析了iOS微信支付交互圖,針對(duì)微信支付的流程圖進(jìn)行解析,感興趣的小伙伴們可以參考一下
    2016-08-08
  • iOS中Swift UISearchController仿微信搜索框

    iOS中Swift UISearchController仿微信搜索框

    這篇文章主要介紹了iOS中Swift UISearchController仿微信搜索框效果,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-05-05
  • iOS?Lotusoot模塊化工具應(yīng)用的動(dòng)態(tài)思路

    iOS?Lotusoot模塊化工具應(yīng)用的動(dòng)態(tài)思路

    項(xiàng)目的不斷更迭,導(dǎo)致項(xiàng)目越來(lái)越大,越來(lái)越臃腫,為了讓項(xiàng)目更加條理,需要對(duì)項(xiàng)目進(jìn)行模塊化處理,為了減少模塊之間的耦合,于是就有了Lotusoot這個(gè)工具
    2022-08-08
  • iOS WKWebview 白屏檢測(cè)實(shí)現(xiàn)的示例

    iOS WKWebview 白屏檢測(cè)實(shí)現(xiàn)的示例

    這篇文章主要介紹了iOS WKWebview 白屏檢測(cè)實(shí)現(xiàn)的示例,幫助大家更好的進(jìn)行ios開(kāi)發(fā),感興趣的朋友可以了解下
    2020-10-10
  • iOS開(kāi)發(fā)--仿新聞首頁(yè)效果WMPageController的使用詳解

    iOS開(kāi)發(fā)--仿新聞首頁(yè)效果WMPageController的使用詳解

    這篇文章主要介紹了iOS開(kāi)發(fā)--仿新聞首頁(yè)效果WMPageController的使用詳解,詳解的介紹了iOS開(kāi)發(fā)中第三方庫(kù)WMPageController控件的使用方法,有需要的可以了解下。
    2016-11-11
  • iOS中最全的各種定時(shí)器使用教程

    iOS中最全的各種定時(shí)器使用教程

    這篇文章主要給大家介紹了關(guān)于iOS中最全的各種定時(shí)器的使用教程,文中通過(guò)示例代碼介紹的非常詳細(xì),通過(guò)文中介紹的最全的定時(shí)器相信會(huì)對(duì)各位iOS開(kāi)發(fā)者們帶來(lái)一定的幫助,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • 支持Xcode10和適配iPhone XS Max、iPhone XR的方法

    支持Xcode10和適配iPhone XS Max、iPhone XR的方法

    這篇文章主要介紹了支持Xcode10和適配iPhone XS Max、iPhone XR的方法,文中通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • 實(shí)例講解iOS應(yīng)用開(kāi)發(fā)中UIPickerView滾動(dòng)選擇欄的用法

    實(shí)例講解iOS應(yīng)用開(kāi)發(fā)中UIPickerView滾動(dòng)選擇欄的用法

    這篇文章主要介紹了iOS應(yīng)用開(kāi)發(fā)中UIPickerView滾動(dòng)選擇欄的用法,示例代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下
    2016-04-04
  • Objective-C的緩存框架EGOCache在iOS App開(kāi)發(fā)中的使用

    Objective-C的緩存框架EGOCache在iOS App開(kāi)發(fā)中的使用

    這篇文章主要介紹了Objective-C的緩存框架EGOCache在iOS App開(kāi)發(fā)中的使用,重點(diǎn)講解了EGOCache對(duì)緩存過(guò)期時(shí)間的檢測(cè)及處理,需要的朋友可以參考下
    2016-05-05

最新評(píng)論