仿簡(jiǎn)書(shū)導(dǎo)航欄圖片隨著UIScrollView的滾動(dòng)放大縮小

一.前言

今天我們就來(lái)實(shí)現(xiàn)簡(jiǎn)書(shū)的導(dǎo)航欄圖片隨著UIScrollView的滾動(dòng)來(lái)改變的效果,簡(jiǎn)書(shū)的效果圖如下:

簡(jiǎn)書(shū)效果圖

二.思路

下面我就說(shuō)一下我的實(shí)現(xiàn)思路,其實(shí)思路很簡(jiǎn)單,主要就是2步:

  • 在UINavigationBar上添加圖片
  • 實(shí)現(xiàn)UIScrollView的代理方法- (void)scrollViewDidScroll:(UIScrollView *)scrollView

下面就具體說(shuō)一下這2步是如何實(shí)現(xiàn)的。

1.在UINavigationBar上添加圖片

這一步其實(shí)很簡(jiǎn)單,但是我在做的時(shí)候也踩了一個(gè)坑,最開(kāi)始我是將UIImageView賦值給navigationBar的titleView,讓UIImageView替代titleView,結(jié)果整個(gè)UIImageView被拉的很長(zhǎng),就像下面一樣:

UIImageView替代titleView

所以不能這樣做,要將UIImageView添加到UINavigationBar上,即:

[self.navigationController.navigationBar addSubview:self.imageView];

NOTE:
因?yàn)閚avigationBar是所有的ViewController共享的,這樣做就會(huì)有一個(gè)問(wèn)題,那就是當(dāng)你push或pop到其他頁(yè)面時(shí),這個(gè)圖片仍然在navigationBar上,這不是我們所希望的,所以我們要啦解決這個(gè)問(wèn)題。
解決這個(gè)問(wèn)題其實(shí)很簡(jiǎn)單,就是隱藏系統(tǒng)的navigationBar,然后自定義一個(gè)navigationBar即可。

  1. 將系統(tǒng)導(dǎo)航欄隱藏,這個(gè)在storyboard或是代碼里都可以隱藏;
  2. [self.navigationController.navigationBar addSubview:self.imageView];改成[self.navigationBar addSubview:self.imageView];,此處的navigationBar是我們自定義的,通過(guò)IBOutLet拖出來(lái)的;
  3. 在viewWillAppear里面隱藏系統(tǒng)的navigationBar,在viewWillDisappear里面顯示系統(tǒng)的navigationBar。
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:animated];
}
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [self.navigationController setNavigationBarHidden:NO animated:animated];
}
2.實(shí)現(xiàn)UIScrollView的代理方法- (void)scrollViewDidScroll:(UIScrollView *)scrollView

這一步是關(guān)鍵,要根據(jù)UIScrollView滾動(dòng)的Y值進(jìn)行計(jì)算,具體代碼如下:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat contentOffsetY = scrollView.contentOffset.y;
    CGFloat scale = 1 - contentOffsetY / 300.0;
    if (scale < 0.5) {
        scale = 0.5;
    } else if (scale > 1.0) {
        scale = 1.0;
    }
    self.imageView.transform = CGAffineTransformMakeScale(scale, scale);
}

ok,搞定了!??????。
效果如下圖:

最終效果圖

最后上一個(gè)Demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • *7月8日上午 N:Block :跟一個(gè)函數(shù)塊差不多,會(huì)對(duì)里面所有的內(nèi)容的引用計(jì)數(shù)+1,想要解決就用__block...
    炙冰閱讀 2,546評(píng)論 1 14
  • 廢話不多說(shuō),直接上干貨 ---------------------------------------------...
    小小趙紙農(nóng)閱讀 3,436評(píng)論 0 15
  • 今天看了一篇文章,說(shuō)的是當(dāng)今社會(huì)的趨勢(shì)是,一個(gè)人不僅僅將自己的職業(yè)局限于特定的一種,而是在自己本職工作之外努力發(fā)展...
    給力青春Sophie閱讀 273評(píng)論 0 0
  • 今天參加老羅發(fā)布會(huì),手機(jī)神奇地沒(méi)有網(wǎng)絡(luò),看著周遭的人都玩著手機(jī),居然會(huì)莫名的惶恐和不安,這就是所謂的離開(kāi)網(wǎng)絡(luò)就沒(méi)有...
    程丸子ca閱讀 142評(píng)論 0 0
  • 各位親: 大家好!好多朋友跟我請(qǐng)教護(hù)膚方案,希望肌膚更清透細(xì)嫩,毛孔細(xì)致,皮膚白暫,細(xì)紋遠(yuǎn)離,21天活膚嫩膚...
    胡蝶FS閱讀 831評(píng)論 3 5