iOS精華執行個體之App啟動插畫的自訂過度

來源:互聯網
上載者:User

轉載請註明出處,保留原帖地址及作者署名.

Url:http://blog.csdn.net/ysy441088327/article/details/8852304

Author:餘書懿


引言:

精華執行個體是博主我新開設的一個專題,這個專題主要介紹一些在iOS應用中非常值得實踐的例子.

歡迎大家轉載和傳播,但請保留原著出處.因為我隨時可能會更新以及錯誤修正.

我希望每一個閱讀精華執行個體的開發人員能夠從中受益,並且熟練的運用這些技巧. 

那麼作為你們呢,在閱讀完這篇文章以後,請盡量留下你的建議和看法. 這是我持續改進文章的一個主要方式.

精華執行個體的章節到底會有多少篇,這個我也很難預料,不過只要是我認為值得寫的,我都會寫出來. 讓大家共同學習和成長!

開篇的廢話比較多,下面開始進入本文:

什麼是App啟動插畫的自訂過度?

我們都知道,App在啟動的時候,會展示一張App啟動插畫來保證App程式載入的等待體驗,讓使用者欣賞美麗的插畫時,App真正默默的努力載入著相關資源,

App自動調用main函數,接著是:didFinishLaunchingWithOptions

當UIWindow執行makeKeyAndVisible時,那麼這張啟動插圖就會自動消失了.但卻是瞬間消失的.

而所謂的自訂過度就是讓啟動插圖更加友好的消失(而不是瞬間沒了),相信在很多主流App產品中已經看到不少這樣的效果.

那麼這個實現方式就是本文要討論的重點!

程式原理是?

程式有時也會有點魔術的感覺,在你不知道原理的時候總感覺它很神秘!

App啟動插畫我們通過工程設定-targets-Summary-Launch Images 來設定.

但是這個啟動插畫的指標我們是擷取不到的.(要是擷取到了,這篇文章估計很短,甚至沒有.)

那怎麼辦呢? 我們肯定要有這個指標,才能去實現自訂的過度,例如一點一點的消失啊,翻一頁書那樣的效果等等.

出於我們的目的,我們只有自己alloc一個UIImageView了,其載入的圖片就是我們啟動插畫的圖片.

但是要保證一點:啟動插畫展示的是什麼樣子,我們自己alloc 的UIImageView也應該是什麼樣子, 不然,這個體驗就大打折扣了 你說呢?

而這個UIImageView我們到底應該addSubview在哪裡是本執行個體的一個技術痛點.

那答案是什麼?

是UIWindow!卻不是keyWindow.而是一個需要我們自己allocUIWindow!   但是它的windowLevel要比keyWindow高一級!

也就是說,為了讓UIImageView順利的展示出來並保證與啟動插畫的樣子一摸一樣,我們需要有一個UIWindow的容器.代碼如下:

UIWindow是一個很神奇的類,當你alloc出來並把windowLevel設定比keyWindowlevel高以後,此時不再需要額外的執行makeKeyAndVisible或者addSubview來讓這個UIWindow顯示出來.
但是這個UIWindow的hidden屬性卻預設是YES, 所以我們需要將hidden設定為NO! 讓UIWindow真正顯示出來.

那麼接下來把我們的UIImageView調用addSubview到這個UIWindow上面.

而alloc UIImageView時 有一點我們需要注意一下:

不要通過imageNamed的方式去獲得UIImage, 大家都應該知道imageNamed是會自動把載入過的圖片資源緩衝起來,如果下次再調用同名稱的圖片,是直接從記憶體中獲得,而我們的這個UIImageView只使用一次,當插畫隱藏以後不再需要重複使用. 

那正確的擷取方式是什麼?

絕對路徑的方式獲得這張圖片資源,就像下面這樣:

imageWithContentsOfFile是符合我們現在使用圖片資源的需求,因為它在使用完成以後會自動清理掉(ARC)

到此,我們的偽裝版啟動插圖已經部署完成.

何時調用呢?

在第一個啟動的ViewController中的viewWillAppear執行這些代碼.那麼不出意外的話,啟動插畫永遠的顯示了出來.

但是我們不是要一直顯示啊,差不多它就應該消失了,只是說消失的時候更加友好一些!

因為我們已經有了UIImageView的指標了,接下來我們可以隨意控制這個UIImageView消失的方式.

也就達到了本文的目的:

App啟動插畫的自訂過度

而博主我對於這項執行個體功能封裝了一個類來方便調用! 已經上傳到Github上. 歡迎大家使用並反饋問題.

它的名字叫:SYAppStart

SYAppStart的API很簡單,

提供一套預設的顯示和隱藏方法

核心在於hideWithCustomBlock來自訂更多隱藏插畫的方式.

希望有人能夠pull request 很棒的自訂隱藏代碼!

小技巧:

1.如何全屏展示啟動插畫(隱藏狀態列那種)?

勾上即可!

2.如何在展示完成以後又立刻恢複狀態列的顯示?

總結:

博主本人已對此功能進行封裝,基本上不需要關心核心功能的實現,那為什麼還要費一大半勁去闡述原理?

因為該功能在於如何利用UIWindow去實現,或者說我們想把頂部狀態列更好的掌控在手中,那麼理解UIWindow是首當其衝!

閱讀完本文以後有任何疑問,都務必說出來,不想註冊csdn帳號的,可以通過微博私信我,這是我持續改進文章內容的主要方式. 謝謝!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.