iOS 超Easy實現 漸變導航欄

發表於2016-10-11

接著上週的專案, 在上週我別出心裁的在自定義TabbarController中加入了自定義轉場動畫, 受到了大家廣泛的喜愛, 再次表示感激, 今天我們繼續實現LifestyleViewController的第二個功能漸變導航欄!!

漸變導航欄, 現在很多專案裡都有這個功能, 我們就把這個功能整合到我們的專案中來; 根據設計圖紙需求, 我們需要在輪播圖下面有一個搜尋欄, 搜尋欄根據滑動偏移到導航欄之上.
具體怎麼實現呢, Easy啦~ 不急,我們一步一步來.

建立搜尋欄Cell

首先開啟我們的專案先在輪播圖Cell下建立一個搜尋欄Cell 並新增子控制元件.

這時你可能會問 為什麼不在Cell中新增TextField之類的, 由於我們的效果,之後再向您揭曉;

控制器 多Cell設計

這時回到控制器, 但是控制器中不止一種Cell, 我們怎麼來設計呢?? 我的實現方法是KeysArr, 那什麼是KeysArr呢,我們來看程式碼.

首先我們需要建立一個全域性類 (這個寫法和上週的 投機流 自定義轉場有異曲同工之妙)

建立全域性類

全域性類中的每一個Key對應著你的一個Cell

.h

.m

keys陣列

接著我們建立一個陣列來持有這些key;

Tableview delegate mothod

最後在代理方法中進行判斷

這樣當不需要某個cell顯示的時候,只需要將keys從KeysArr中移除即可, 是不是很方便!!

建立搜尋欄View

這裡需要提醒大家的一點, 當你在自定義View的時候最好要實現initWithFrameinitWithCoder兩個方法, 這樣無論是用純程式碼還是Xib,Storyboard使用自定義View時都能夠直接載入!!

實現位移漸變

重於到今天的重頭戲了, 我們來實現位移漸變!! 上面的自定義View 我們並不是將其新增到Cell之中, 而是將他新增到navigationController.view之上!!

建立兩個自定義View

其中一個的frame = self.navigationController.navigationBar.frame
並將其新增到titleView中!! 另一個將其載入navigationController.view中!! 並在viewWillLayoutSubviews中設定佈局!!

監聽偏移

我們將設定導航欄背景顏色的方法從LoadView移到scrollViewDidScroll中來
這裡需要和大家細說一下監聽偏移漸變,其實很簡單,就是一個公式而已 float alpha = 1 - (offset) - scrollView.contentOffset.y) / offset); 其中的offset 指的是y軸方向從初始值viewWillLayoutSubviews中的初始設定 到導航欄的位移!!
每滑動下重新呼叫viewWillLayoutSubviews方法重新佈局, 當其到達位移點的時候, 兩個View進行交換就達到了 預期的效果!!

對位移漸變的封裝

上面的程式碼看到暈暈乎乎,講的不清不楚!! 我們來講這個功能封裝一下, 先建立一個UIViewController的Catagory 實現方法!!

  • scrollView: 傳入需要位移的scrollView;
  • titleView: 傳入導航欄上的titleView;
  • movableView: 傳入需要移動的自定義View;
  • offset: 傳入y軸方向從初始值到導航欄的位移;
  • color: 傳入導航欄顏色

這樣我們在呼叫的時候就簡單明瞭多了!! 以後做到這個功能的時候可以直接拿來用了!!

模擬效果

為了能看到效果 我們在控制器中多加幾個cell 方法很簡單隻要在Key陣列中多加幾個物件即可! 並在key == @"" 時載入如下Cell

好了 我們來看下顯示效果吧~~

iOS 超Easy實現 漸變導航欄
在Reaval中顯示
121229762-1c7cddf4633b21a4

最終顯示

 131229762-b376f50d1e1d3aaf

github 下載地址!!!
141229762-0a46036fb613eb0f
上週有人說我沒有放出Demo 小弟真是冤枉至極, 這次特地做出標註(下方連結跳轉)!!
具體原始碼及SQExtension方法資訊 請到github上進行下載! 喜歡的朋友送下小星星喲!!

相關文章