NavigationBar上拉漸變, 下拉圖片放大效果

首先, 簡述一下我想實現(xiàn)的效果, 整個頁面是以一個tableView為主的簡單瀏覽頁, tableView.headView上有一張圖片.
效果1: 當(dāng)下拉頁面時, 圖片放大, 當(dāng)松開手指時, 圖片恢復(fù)到原來大小
效果2: 當(dāng)上拉頁面, 從視圖逐漸消失時, NavigationBar出現(xiàn)并伴隨漸變效果

NavgationBar動畫.gif

廢話不多說, 先上代碼(我將按照我自己的思路逐步講解):

  1. 將屏幕寬度和屏幕高度設(shè)為宏,簽協(xié)議舍肠, 并根據(jù)需求設(shè)置屬性
#define kScreenWith [UIScreen mainScreen].bounds.size.width
#define kScreenHeight [UIScreen mainScreen].bounds.size.height
@interface ViewController ()
<
    UITableViewDataSource,
    UITableViewDelegate,
    UIScrollViewDelegate
>
@property (nonatomic, strong) UITableView *myTableView;
@property (nonatomic, strong) UIView *backViewForTableHeaderView;
@property (nonatomic, strong) UIImageView *backImageViewForTableHeaderView;
@property (nonatomic, strong) UIImageView *barImageView;
@property (nonatomic, strong) UILabel *nameLabel;
@end
- (void)viewDidLoad {
   [super viewDidLoad];
   // 創(chuàng)建tableView
   [self createTableView];   
   // 處理navigationBar
   [self handleNavigationBar];
}
  1. 創(chuàng)建一個tableView(這一步就不用我多說了吧), 這里創(chuàng)建tableView時, 要將y坐標(biāo)設(shè)為-64, 讓tableView顯示在NavgationBar的下方, 同時tableView的高度要+64, 以保證占據(jù)整個屏幕
- (void)createTableView {
   self.myTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, -64, kScreenWidth,kScreenHeight + 64)];
   _myTableView.backgroundColor = [UIColor whiteColor];
   _myTableView.delegate = self;
   _myTableView.dataSource = self;
   [_myTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"reuse"];
   [self.view addSubview:_myTableView];
   _myTableView.tableHeaderView = [self createTableHeaderView];
}

創(chuàng)建tableView頭視圖, 頭視圖上放置一個imageView和一個label.

 - (UIView *)createTableHeaderView {
    self.backViewForTableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 200)];
    self.backImageViewForTableHeaderView = [[UIImageView alloc] initWithFrame:self.backViewForTableHeaderView.bounds];
    _backImageViewForTableHeaderView.image = [UIImage imageNamed:@"1.jpg"];
    [self.backViewForTableHeaderView addSubview:_backImageViewForTableHeaderView];
    self.nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 150, 200, 40)];
    _nameLabel.text = @"這游戲真難";
    [self.backViewForTableHeaderView addSubview:_nameLabel];
    return _backViewForTableHeaderView;
}
 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 50;
}
 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuse"];
    cell.textLabel.text = [NSString stringWithFormat:@"cell- %ld", indexPath.row];
    return cell;
}
  1. 在navigationBar上創(chuàng)建一個imageView用來顯示背景圖片,
 - (void)handleNavigationBar {
    // 去掉背景圖片
    [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
    // 去掉navigationBar底部線條
    [self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
    // 此處y設(shè)置為-20, 否則狀態(tài)欄不能被覆蓋
    self.barImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, -20, kScreenWidth, 64)];
    _barImageView.image = [UIImage imageNamed:@"2.png"];
    [self.navigationController.navigationBar addSubview:_barImageView];
    self.navigationItem.title = @"導(dǎo)航欄";
}
  1. 在tableView滑動方法中更改navigationBar上背景圖片的透明度, 和tableHeaderView上的imageView的frame, 故要將tableView的偏移量與bar上imageView的透明度關(guān)聯(lián), 并將tableHeaderView上的frame與偏移量關(guān)聯(lián), 實現(xiàn)上拉導(dǎo)航欄漸變, 下拉圖片放大的效果.
 - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat offset_Y = scrollView.contentOffset.y;
    CGFloat alpha = (offset_Y + 64) / 200.0f;
    self.barImageView.alpha = alpha;
    if (offset_Y < -64) {
        CGFloat add_height = -(offset_Y + 64);
        CGFloat scale = (200 + add_height) / 200.0f;
        self.backImageViewForTableHeaderView.frame = CGRectMake(-(kScreenWidth * scale - kScreenWidth) / 2.0f, -add_height, kScreenWidth * scale, 200 + add_height);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌闸昨,老刑警劉巖喉脖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異磁餐,居然都是意外死亡,警方通過查閱死者的電腦和手機阿弃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門诊霹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人渣淳,你說我怎么就攤上這事脾还。” “怎么了入愧?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵鄙漏,是天一觀的道長。 經(jīng)常有香客問我棺蛛,道長怔蚌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任旁赊,我火速辦了婚禮桦踊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘终畅。我一直安慰自己籍胯,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布离福。 她就那樣靜靜地躺著杖狼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪术徊。 梳的紋絲不亂的頭發(fā)上本刽,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天,我揣著相機與錄音,去河邊找鬼子寓。 笑死暗挑,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的斜友。 我是一名探鬼主播炸裆,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鲜屏!你這毒婦竟也來了烹看?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤洛史,失蹤者是張志新(化名)和其女友劉穎惯殊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體也殖,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡土思,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了忆嗜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乒疏。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡客峭,死狀恐怖同蜻,靈堂內(nèi)的尸體忽然破棺而出絮蒿,到底是詐尸還是另有隱情,我是刑警寧澤绩卤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布途样,位于F島的核電站,受9級特大地震影響省艳,放射性物質(zhì)發(fā)生泄漏娘纷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一跋炕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧律适,春花似錦辐烂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至厂僧,卻和暖如春扣草,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工辰妙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鹰祸,地道東北人。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓密浑,卻偏偏與公主長得像蛙婴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子尔破,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,515評論 2 359

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

  • *7月8日上午 N:Block :跟一個函數(shù)塊差不多街图,會對里面所有的內(nèi)容的引用計數(shù)+1,想要解決就用__block...
    炙冰閱讀 2,492評論 1 14
  • 前言 最近忙完項目比較閑懒构,想寫一篇博客來分享一些自學(xué)iOS的心得體會餐济,希望對迷茫的你有所幫助。博主非科班出身胆剧,一些...
    GitHubPorter閱讀 1,435評論 9 5
  • 1.badgeVaule氣泡提示 2.git終端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夾內(nèi)容...
    i得深刻方得S閱讀 4,675評論 1 9
  • 做一件有難度的事情颤介,之前又從來沒有過成功的經(jīng)驗,該如何確保自己能夠一路堅持下去呢赞赖。 在做事情之前滚朵,很多時候都會被自...
    山頂?shù)暮诠沸?/span>閱讀 159評論 0 0
  • 九九是我從格爾木返回西寧的火車上認(rèn)識的一個女孩,18歲前域,剛高中畢業(yè)辕近,瘦小的身影,怎么看都覺得應(yīng)該有個人陪伴才叫人放...
    莫思辰閱讀 1,280評論 0 1