iOS-Main-細(xì)學(xué)->頂部視圖放大

前言:
--- 細(xì)講一下冬阳,頂部視圖下拉放大,其中有很多細(xì)節(jié)非常值得學(xué)習(xí)党饮,比如說(shuō)肝陪,分割線的設(shè)置,狀態(tài)欄的設(shè)置刑顺,向上整體移動(dòng)和向下offset的變化氯窍,圖片的裁切等。都是我一點(diǎn)一點(diǎn)截的圖蹲堂!終于弄完了狼讨!

最終效果圖:

最終效果圖


共分為 8 個(gè)部分

  • 第一部分 頂部放大的準(zhǔn)備工作
  • 第二部分 添加 headerView
  • 第三部分 運(yùn)行時(shí)攔截全屏返回手勢(shì)&導(dǎo)航欄處理細(xì)節(jié)
  • 第四部分 AFN加載圖像的 細(xì)節(jié)YYWebImage的指示器和頭文件的導(dǎo)入方法
  • 第五部分 圖像放大處理
  • 第六部分 圖像的整體移動(dòng)簡(jiǎn)單實(shí)現(xiàn)
  • 第七部分 設(shè)置分割線和透明度
  • 第八部分 設(shè)置狀態(tài)欄顏色
    demo下載地址
第一部分 頂部放大的準(zhǔn)備工作
  • 1. 創(chuàng)建一個(gè)工程,并嵌入一個(gè)Nav,進(jìn)行基礎(chǔ)布置贯城。
    嵌入一個(gè)Nav

    簡(jiǎn)單布置nav
  • 2.創(chuàng)建一個(gè)類ZYHeaderViewController,并設(shè)置其背景顏色為白色熊楼。
    ZYHeaderViewController

    將該類的頭文件,導(dǎo)入ViewController.m中能犯,并設(shè)置跳轉(zhuǎn)鲫骗。如下圖:
    設(shè)置跳轉(zhuǎn)

    當(dāng)前效果圖:
    效果圖.gif
  • 3.準(zhǔn)備tableView
    圖1

    圖2

    當(dāng)前效果:
    效果圖.gif
第二部分 添加 headerView

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

  • 1. 布置headerView
    布置headerView

    當(dāng)前效果圖:
    效果圖

    由上述效果圖顯示踩晶,我們的headerView的下面的行是從3执泰、4開(kāi)始的,出現(xiàn)了這一個(gè)問(wèn)題渡蜻。我們?cè)诳匆幌乱晥D層次結(jié)構(gòu)术吝。如下:
    視圖層次結(jié)構(gòu)

    我們得知了,1茸苇、2行排苍,被headerView擋住了。
  • 2. 總結(jié)一下問(wèn)題
    我們要解決的:
    1)把導(dǎo)航欄隱藏起來(lái),并設(shè)置狀態(tài)欄
    導(dǎo)航欄隱藏起來(lái),并設(shè)置狀態(tài)欄

    2)調(diào)整表格與headerVIew的間距
    我們利用contentInset來(lái)調(diào)整表格與headerView的間距学密,如下圖:
    調(diào)整表格與headerView的間距

    運(yùn)行效果圖如下:
    運(yùn)行效果圖

    由上圖我們可知淘衙,第 0 行,與headerView之間腻暮,還多20彤守,那是因?yàn)槿缦聢D所示的原因,所以這樣解決:
    解決

    效果圖:
    效果圖
  1. 滾動(dòng)指示器的設(shè)置
    我們從上邊的效果圖哭靖,可得知具垫,滾動(dòng)顯示器卻不在了,為什莫呢试幽?如下圖分析:
    分析

    所以呢筝蚕,在滾動(dòng)視圖的時(shí)候,我們就看不到,滾動(dòng)指示器了饰及。
    該怎么設(shè)置呢要?
    解決滾動(dòng)指示器問(wèn)題

    效果圖:
    效果圖
第三部分 運(yùn)行時(shí)攔截全屏返回手勢(shì)&導(dǎo)航欄處理細(xì)節(jié)
  • 1.發(fā)現(xiàn)問(wèn)題
    看圖

    問(wèn)題:我們知道蔗坯,上述是可以用手拖動(dòng)的康震,但是燎含,我們拖到另一個(gè)控制器的時(shí)候,我們發(fā)現(xiàn)腿短,導(dǎo)航欄消失了屏箍,我們返回 ,回不去了橘忱。
    怎么解決這個(gè)問(wèn)題呢赴魁?
    我們知道,我們?cè)趖ableView這個(gè)頁(yè)面將要顯示的時(shí)候钝诚,隱藏了NAV
    顯示nav

    如圖所示颖御,nav,顯示了凝颇,但是發(fā)生了疊加潘拱,該怎么解決呢?
    animated = YES
第四部分 AFN加載圖像的 細(xì)節(jié)YYWebImage的指示器和頭文件的導(dǎo)入方法
  • 1. 添加UIImageView
    添加UIImageView
  • 2.添加 AFN /YYWebImage
    pod
  • 3. AFN 網(wǎng)絡(luò)加載圖片
    AFN方法

    導(dǎo)入AFN頭文件
    導(dǎo)入AFN頭文件

    加載圖片拧略,但是不顯示
    加載圖片芦岂,但是不顯示

    從用戶的角度考慮,這種 情況下垫蛆,用戶會(huì)有不好的體驗(yàn)禽最,那我們應(yīng)該提示用戶,應(yīng)該像下圖一樣加上一個(gè)小菊花袱饭,表示在努力工作中ing.
    小菊花

    小菊花顯示

    圖片加載成功

    使用AFN會(huì)有個(gè)問(wèn)題川无,當(dāng)我們切換的時(shí)候,加載的圖片總會(huì)閃(緩)一下虑乖,應(yīng)為AFN加載圖片時(shí)懦趋,圖片如果過(guò)大的話,它不會(huì)緩存决左,AFN是用的系統(tǒng)的緩存愕够。
    AFN細(xì)節(jié)
  • 4. YYWebImage 網(wǎng)絡(luò)加載圖片
    頭文件的導(dǎo)入
    頭文件的導(dǎo)入

    加載圖片
    加載圖片
第五部分 圖像放大處理
  • 1. 分析
    我們要使圖片放大處理的話,我們可以使用scrollViewDidScroll:這個(gè)代理方法佛猛。那么惑芭,我們根據(jù)什莫讓上邊的圖片放大呢,contentOffset
    分析
  • 2. 打印一下contentOffset
    圖解
  • 3. 設(shè)置放大
    我們來(lái)看放大继找,我們需要改什莫遂跟?
    先將headerView和headerViewImage設(shè)置成全局,如下圖:
    headerView-1

    headerView-2

    headerViewImage-1

    headerViewImage-2

    下圖,達(dá)到了下滾放大的效果
    下滾放大

    但是幻锁,我們發(fā)現(xiàn)一個(gè)問(wèn)題凯亮,圖片放大的時(shí)候,特別別扭哄尔,有點(diǎn)卡頓假消。那我們?cè)趺唇鉀Q呢,只有讓圖片等比例填充即可岭接,如下圖:
    等比例填充

    效果圖:
    效果圖.gif

    雖然富拗,這種方法,規(guī)避了很多復(fù)雜的運(yùn)算鸣戴,但是啃沪,還有一個(gè)很不愉快的問(wèn)題,當(dāng)我們返回時(shí)窄锅,會(huì)發(fā)生下圖這種現(xiàn)象(圖像比底View大):
    圖像比底View大

    那我們?cè)撛趺崔k呢创千?
    我們只能裁切一下,如下圖:
    裁切

    效果圖:
    效果圖.gif

    問(wèn)題,解決完畢H胪怠W仿俊!
第六部分 圖像的整體移動(dòng)簡(jiǎn)單實(shí)現(xiàn)
  • 1. 簡(jiǎn)單的整體移動(dòng)
    簡(jiǎn)單的整體移動(dòng)

    此時(shí)效果圖:
    效果圖.gif
第七部分 設(shè)置分割線和透明度
  • 1. 問(wèn)題分析---定點(diǎn)
    分析

    分析:我們看上面的圖盯串,現(xiàn)在我們的需求是氯檐,當(dāng)表格滾到這個(gè)位置就不往上滾了,這個(gè)效果怎么實(shí)現(xiàn)呢体捏?我們看上面是一個(gè)狀態(tài)欄的高度冠摄。狀態(tài)欄 +導(dǎo)航欄的高度是64。
    思路

    思路:我們讓headerView移動(dòng)到上圖位置就不動(dòng)了,高度我們已經(jīng)算好了几缭,用headerView - 64 就知道headerView的y值了河泳,定到此位置。
    min

    當(dāng)offset = min的時(shí)候年栓,是處于圖-思路那樣
    當(dāng)offset < min的時(shí)候拆挥,說(shuō)明,圖片慢慢的往上移
    當(dāng)offset > min的時(shí)候某抓,說(shuō)明圖片即將移除模擬器
    總結(jié)如下纸兔,當(dāng)圖片在向上整體移動(dòng)過(guò)程中,offset小于min否副,headerVIew的y值汉矿,取 - offset,反之取 - min;
  • 2. 設(shè)置透明度
    效果圖

    根據(jù)上圖,我們分析备禀,我們打印了 offset / min 可知洲拇,當(dāng)整體向上移動(dòng)的時(shí)候 從offset / min = 0 開(kāi)始奈揍,到了指定位置offset / min = 1;并且徹底的隱藏赋续,導(dǎo)航欄卻顯示男翰。
    示例代碼

    效果圖:
    效果圖.gif

    但是沒(méi)有導(dǎo)航欄,那怎么樣才能讓導(dǎo)航欄出來(lái)呢纽乱?
  • 2. 設(shè)置導(dǎo)航欄
    其實(shí)蛾绎,在這種demo中導(dǎo)航欄是沒(méi)有意思的。步驟如下:

取色


取色

改headerView的背景顏色


改headerView的背景顏色
  • 3. 設(shè)置分割線
    同樣迫淹,對(duì)于分割線秘通,我們?cè)谶@個(gè)UIView底部,添加一條線敛熬,當(dāng)向上移動(dòng)時(shí),該線與Nav的底線重合第股,但是當(dāng)向下移動(dòng)時(shí)应民,我們發(fā)現(xiàn)這條紅線不動(dòng),貌似到了圖片的脖子處夕吻,就此诲锹,我們明白,當(dāng)向下移動(dòng)時(shí)涉馅,我們需要改變這條線的位置归园。
    查看層次結(jié)構(gòu)圖
    查看層次結(jié)構(gòu)圖

    添加分割線
    添加分割線

    效果圖:
    效果圖.gif

    更改分割線位置
    改_lineview

    改_lineview

    剛才是放大的時(shí)候,出現(xiàn)的問(wèn)題稚矿,解決如下:
    解決

    這樣的話庸诱,無(wú)論放大還是縮小,線的位置永遠(yuǎn)等于headerView減去自己的位置晤揣。
  • 3. 改分割線的顏色
    為了桥爽,更像
    改分割線的顏色

    效果圖如下:
    效果圖.gif
第八部分 設(shè)置狀態(tài)欄顏色
  • 1. 需求
    當(dāng)圖片越來(lái)模糊的時(shí)候,狀態(tài)欄越來(lái)越黑
  • 2.解決
    實(shí)例代碼1

    實(shí)例代碼2

    最終結(jié)果:請(qǐng)看第一張gif圖.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末昧识,一起剝皮案震驚了整個(gè)濱河市钠四,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌跪楞,老刑警劉巖缀去,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異甸祭,居然都是意外死亡缕碎,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門淋叶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)阎曹,“玉大人伪阶,你說(shuō)我怎么就攤上這事〈ο樱” “怎么了栅贴?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)熏迹。 經(jīng)常有香客問(wèn)我檐薯,道長(zhǎng),這世上最難降的妖魔是什么注暗? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任坛缕,我火速辦了婚禮,結(jié)果婚禮上捆昏,老公的妹妹穿的比我還像新娘赚楚。我一直安慰自己,他們只是感情好骗卜,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布宠页。 她就那樣靜靜地躺著,像睡著了一般寇仓。 火紅的嫁衣襯著肌膚如雪举户。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,046評(píng)論 1 285
  • 那天遍烦,我揣著相機(jī)與錄音俭嘁,去河邊找鬼。 笑死服猪,一個(gè)胖子當(dāng)著我的面吹牛供填,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蔓姚,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼捕虽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了坡脐?” 一聲冷哼從身側(cè)響起泄私,我...
    開(kāi)封第一講書(shū)人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎备闲,沒(méi)想到半個(gè)月后晌端,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡恬砂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年咧纠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泻骤。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡漆羔,死狀恐怖梧奢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情演痒,我是刑警寧澤亲轨,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站鸟顺,受9級(jí)特大地震影響惦蚊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜讯嫂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一蹦锋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧欧芽,春花似錦莉掂、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至昏鹃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間诀诊,已是汗流浹背洞渤。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留属瓣,地道東北人载迄。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像抡蛙,于是被迫代替她去往敵國(guó)和親护昧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容