iOS-Main-細學->頂部視圖放大

前言:
--- 細講一下,頂部視圖下拉放大,其中有很多細節非常值得學習,比如說,分割線的設置,狀態欄的設置,向上整體移動和向下offset的變化,圖片的裁切等。都是我一點一點截的圖!終于弄完了!

最終效果圖:

最終效果圖


共分為 8 個部分

  • 第一部分 頂部放大的準備工作
  • 第二部分 添加 headerView
  • 第三部分 運行時攔截全屏返回手勢&導航欄處理細節
  • 第四部分 AFN加載圖像的 細節YYWebImage的指示器和頭文件的導入方法
  • 第五部分 圖像放大處理
  • 第六部分 圖像的整體移動簡單實現
  • 第七部分 設置分割線和透明度
  • 第八部分 設置狀態欄顏色
    demo下載地址
第一部分 頂部放大的準備工作
  • 1. 創建一個工程,并嵌入一個Nav,進行基礎布置。
    嵌入一個Nav

    簡單布置nav
  • 2.創建一個類ZYHeaderViewController,并設置其背景顏色為白色。
    ZYHeaderViewController

    將該類的頭文件,導入ViewController.m中,并設置跳轉。如下圖:
    設置跳轉

    當前效果圖:
    效果圖.gif
  • 3.準備tableView
    圖1

    圖2

    當前效果:
    效果圖.gif
第二部分 添加 headerView

我們使用HMObjcSugar,你可以pod集成.

  • 1. 布置headerView
    布置headerView

    當前效果圖:
    效果圖

    由上述效果圖顯示,我們的headerView的下面的行是從3、4開始的,出現了這一個問題。我們在看一下視圖層次結構。如下:
    視圖層次結構

    我們得知了,1、2行,被headerView擋住了。
  • 2. 總結一下問題
    我們要解決的:
    1)把導航欄隱藏起來,并設置狀態欄
    導航欄隱藏起來,并設置狀態欄

    2)調整表格與headerVIew的間距
    我們利用contentInset來調整表格與headerView的間距,如下圖:
    調整表格與headerView的間距

    運行效果圖如下:
    運行效果圖

    由上圖我們可知,第 0 行,與headerView之間,還多20,那是因為如下圖所示的原因,所以這樣解決:
    解決

    效果圖:
    效果圖
  1. 滾動指示器的設置
    我們從上邊的效果圖,可得知,滾動顯示器卻不在了,為什莫呢?如下圖分析:
    分析

    所以呢,在滾動視圖的時候,我們就看不到,滾動指示器了。
    該怎么設置呢要?
    解決滾動指示器問題

    效果圖:
    效果圖
第三部分 運行時攔截全屏返回手勢&導航欄處理細節
  • 1.發現問題
    看圖

    問題:我們知道,上述是可以用手拖動的,但是,我們拖到另一個控制器的時候,我們發現,導航欄消失了,我們返回 ,回不去了。
    怎么解決這個問題呢?
    我們知道,我們在tableView這個頁面將要顯示的時候,隱藏了NAV
    顯示nav

    如圖所示,nav,顯示了,但是發生了疊加,該怎么解決呢?
    animated = YES
第四部分 AFN加載圖像的 細節YYWebImage的指示器和頭文件的導入方法
  • 1. 添加UIImageView
    添加UIImageView
  • 2.添加 AFN /YYWebImage
    pod
  • 3. AFN 網絡加載圖片
    AFN方法

    導入AFN頭文件
    導入AFN頭文件

    加載圖片,但是不顯示
    加載圖片,但是不顯示

    從用戶的角度考慮,這種 情況下,用戶會有不好的體驗,那我們應該提示用戶,應該像下圖一樣加上一個小菊花,表示在努力工作中ing.
    小菊花

    小菊花顯示

    圖片加載成功

    使用AFN會有個問題,當我們切換的時候,加載的圖片總會閃(緩)一下,應為AFN加載圖片時,圖片如果過大的話,它不會緩存,AFN是用的系統的緩存。
    AFN細節
  • 4. YYWebImage 網絡加載圖片
    頭文件的導入
    頭文件的導入

    加載圖片
    加載圖片
第五部分 圖像放大處理
  • 1. 分析
    我們要使圖片放大處理的話,我們可以使用scrollViewDidScroll:這個代理方法。那么,我們根據什莫讓上邊的圖片放大呢,contentOffset
    分析
  • 2. 打印一下contentOffset
    圖解
  • 3. 設置放大
    我們來看放大,我們需要改什莫?
    先將headerView和headerViewImage設置成全局,如下圖:
    headerView-1

    headerView-2

    headerViewImage-1

    headerViewImage-2

    下圖,達到了下滾放大的效果
    下滾放大

    但是,我們發現一個問題,圖片放大的時候,特別別扭,有點卡頓。那我們怎么解決呢,只有讓圖片等比例填充即可,如下圖:
    等比例填充

    效果圖:
    效果圖.gif

    雖然,這種方法,規避了很多復雜的運算,但是,還有一個很不愉快的問題,當我們返回時,會發生下圖這種現象(圖像比底View大):
    圖像比底View大

    那我們該怎么辦呢?
    我們只能裁切一下,如下圖:
    裁切

    效果圖:
    效果圖.gif

    問題,解決完畢!!!
第六部分 圖像的整體移動簡單實現
  • 1. 簡單的整體移動
    簡單的整體移動

    此時效果圖:
    效果圖.gif
第七部分 設置分割線和透明度
  • 1. 問題分析---定點
    分析

    分析:我們看上面的圖,現在我們的需求是,當表格滾到這個位置就不往上滾了,這個效果怎么實現呢?我們看上面是一個狀態欄的高度。狀態欄 +導航欄的高度是64。
    思路

    思路:我們讓headerView移動到上圖位置就不動了,高度我們已經算好了,用headerView - 64 就知道headerView的y值了,定到此位置。
    min

    當offset = min的時候,是處于圖-思路那樣
    當offset < min的時候,說明,圖片慢慢的往上移
    當offset > min的時候,說明圖片即將移除模擬器
    總結如下,當圖片在向上整體移動過程中,offset小于min,headerVIew的y值,取 - offset,反之取 - min;
  • 2. 設置透明度
    效果圖

    根據上圖,我們分析,我們打印了 offset / min 可知,當整體向上移動的時候 從offset / min = 0 開始,到了指定位置offset / min = 1;并且徹底的隱藏,導航欄卻顯示。
    示例代碼

    效果圖:
    效果圖.gif

    但是沒有導航欄,那怎么樣才能讓導航欄出來呢?
  • 2. 設置導航欄
    其實,在這種demo中導航欄是沒有意思的。步驟如下:

取色


取色

改headerView的背景顏色


改headerView的背景顏色
  • 3. 設置分割線
    同樣,對于分割線,我們在這個UIView底部,添加一條線,當向上移動時,該線與Nav的底線重合,但是當向下移動時,我們發現這條紅線不動,貌似到了圖片的脖子處,就此,我們明白,當向下移動時,我們需要改變這條線的位置。
    查看層次結構圖
    查看層次結構圖

    添加分割線
    添加分割線

    效果圖:
    效果圖.gif

    更改分割線位置
    改_lineview

    改_lineview

    剛才是放大的時候,出現的問題,解決如下:
    解決

    這樣的話,無論放大還是縮小,線的位置永遠等于headerView減去自己的位置。
  • 3. 改分割線的顏色
    為了,更像
    改分割線的顏色

    效果圖如下:
    效果圖.gif
第八部分 設置狀態欄顏色
  • 1. 需求
    當圖片越來模糊的時候,狀態欄越來越黑
  • 2.解決
    實例代碼1

    實例代碼2

    最終結果:請看第一張gif圖.
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容