AppStore這個軟件是咱們蘋果用戶常常用到的,我在demo中對它進行了模仿,項目的地址是這裏。git
本文是想講解一下項目中我以爲不錯的效果,主要包括下面三部分:github
打開:從Today的列表中點擊某一個cell,而後present出詳情頁面。swift
關閉:從詳情頁面點擊關閉按鈕,或者按住屏幕下滑,關閉詳情頁面。markdown
整個動畫過程是在TodayViewController
到CardDetailViewController
中完成的。app
這裏的打開和關閉都屬於自定義轉場動畫,所以首要的一點是詳情頁面要遵循代理UIViewControllerTransitioningDelegate
oop
這裏TodayAnimationTransition
是定義轉場動畫的效果具體是如何實現的,CardPresentationController
是轉場發生時的背景,也就是在詳情頁面下拉時,看到的高斯模糊效果。佈局
下面來看看其中的具體是如何present的。這一部分實現是在TodayAnimationTransition.swift
中。動畫
這裏分爲3個部分:spa
先經過transitionContext
得到轉場動畫的中須要的元素3d
設置動畫開始時,控制器的size,也就是列表中卡片的大小
動畫結束時,控制器的size撐滿屏幕,卡片的size也隨之變大
dismiss的部分原理相似,不過多了一個下拉關閉的手勢。
這個動畫裏還包含了不少細節,包括:
狀態欄和底部導航欄的隱藏和顯示。
按住卡片時,卡片縮小,鬆開時,跳轉到詳情頁面
具體細節能夠到代碼中查看。
1.上下滑動漸變的導航欄和頂部視圖,對應的控制器是DetailViewController
。
首先自定義navigationBar。對應的類是DetailNavigationView
而後基於全屏的滑動效果,咱們將全部內容都放到一個tableView裏。
設置頂部圖片爲tableView的tableHeaderView
。
最後在tableView滑動時,按比例改變navigationBar的透明度,返回按鈕的顏色,以及tableHeaderView的大小。
由於同時涉及到大小,透明度,顏色的變化,這裏的運算會稍微複雜點:
如上,3個註釋對應着
頂部圖片的大小變化
navigationBar的透明度變化
返回按鈕的顏色變化
具體實現請到代碼中看。
對應的實如今UpdateTableViewController
和UpdateTableViewCell
這裏其實主要想說的是使用UITableViewCell的自適應高度,有些時候很是管用。
例如在更新列表中,原本每個cell的等高的,但點擊更多按鈕後,cell的高度會變化。使用自適應高度後,咱們並不關心實際每個cell的高度,一切都交給系統本身去適配。
這裏cell的佈局我是用xib實現的,關鍵點在於xib由顯示文字的控件和其餘控件撐滿,當文字越多時,顯示文字的label越大,系統計算出cell的高度也會越大。
如圖,ContentLabel是顯示主要文字的Label,它的上下左右的約束,使得cell高度會隨它的高度變化而變化。
在UpdateTableViewController中的代碼也很是少,
只須要設置cell的預估高度,並將實際高度設爲自適應,最後註冊這個cell就好了
項目中還包括了個人詳情頁面,搜索頁面等,有興趣的朋友也能夠看看。