iOS-仿QQ下拉效果

現(xiàn)在在很多的App中都可以看見類似這樣的效果:

g.gif

分析:

  • 實現(xiàn)這樣的效果我們需要考慮如下幾個問題:

  • 1.用什么控件實現(xiàn)這樣效果碘举?

  • 2.怎么樣實現(xiàn)導航欄的顏色的變化

  • 3.上下滑動的時候浴韭,怎么實現(xiàn)圖片的尺寸的變化

  • a.對于第一點跪帝,我們可以看見下面是用UITableView來實現(xiàn)的类浪,首先會想到上面的圖片放到cell中收苏,但拖動cell的時候上面的圖片很難保持在頂部

  • b.導航欄用原生的導航欄,很難控制,因為原生的導航欄里包含了許多的控件,所以這里我們用自定義導航欄來實現(xiàn)

  • c.上下滑動的時候通過其偏移量杈绸,來計算圖片的尺寸的變化

下面我們來實現(xiàn):

  • 第一步:
    • 創(chuàng)建自定的導航欄,這里我自定義了一個類來實現(xiàn):
    • 初始狀態(tài)下的導航欄是透明的
 BPCustomNavBar *nav = [[BPCustomNavBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 64)];
    nav.title = @"風景如畫";
    nav.titleColor = [UIColor whiteColor];
    nav.leftImage = @"back_icon";
    nav.rightImage = @"share_icon";
    nav.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.f];
    [self.view addSubview:nav];
    self.navBar = nav;
  • 第二步:
    • 創(chuàng)建圖片:
//創(chuàng)建背景圖片
    self.bgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"2"]];
    self.bgView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.width*0.8);
    self.originalFrame = self.bgView.frame;
    [self.view addSubview:self.bgView];
  • 第三步:
    • 創(chuàng)建下面部分的UITableView
    • 因tableView也可以滑動到上面矮瘟,所有其y值瞳脓,應該是導航欄的高度,但這樣就擋住了背景的圖片澈侠,所以我們需要創(chuàng)建tableView的頭部是視圖劫侧,將其背景色clear這樣就可以達到要求:
//新建UItableView
    UITableView *table = [[UITableView alloc] initWithFrame:CGRectMake(0, 64, self.view.frame.size.width, self.view.frame.size.height) style:UITableViewStylePlain];
    table.backgroundColor = [UIColor clearColor];
    table.delegate = self;
    table.dataSource = self;
    [self.view addSubview:table];
    self.tableView = table;
    
    //添加頭部
    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, headHeight)];
    headerView.backgroundColor = [UIColor clearColor];
    self.tableView.tableHeaderView = headerView;

  • 第四步:
    • 實現(xiàn)滑動tableView改變背景圖片的尺寸,監(jiān)聽其scrollView的方法- (void)scrollViewDidScroll:(UIScrollView *)scrollView 哨啃,監(jiān)聽其偏移量:
 CGFloat yoffset = scrollView.contentOffset.y;
    NSLog(@"===========%f",yoffset);
    //當其偏移量在headView的范圍內(nèi)的時候板辽,navBar顏色的改變
    if (yoffset < headHeight) {
        self.navBar.titleColor = [UIColor whiteColor];
        self.navBar.leftImage = @"back_icon";
        self.navBar.rightImage = @"share_icon";
        self.navBar.backgroundColor = [[UIColor redColor] colorWithAlphaComponent:yoffset/headHeight];
    }else {
        self.navBar.titleColor = [UIColor whiteColor];
        self.navBar.backgroundColor = [UIColor redColor];
        self.navBar.leftImage = @"back_icon";
        self.navBar.rightImage = @"share_icon";
    }
    
    //上下滑動的時候的背景圖片的放大
    if (yoffset > 0) {//往上拖動
        self.bgView.frame = ({
            CGRect frame = self.bgView.frame;
            frame.origin.y = self.originalFrame.origin.y -yoffset;
            frame;
        });
        
        
    }else {//往下拖動
        
        self.bgView.frame = ({//高度變化的比較快
            CGRect frame = self.bgView.frame;
            frame.size.height = self.originalFrame.size.height -yoffset;
            frame.size.width = self.originalFrame.size.width * frame.size.height /self.originalFrame.size.height;
            frame.origin.x = -(frame.size.width - self.originalFrame.size.width)/2;
            frame.origin.y = 0;
            frame;
        });
        
//        self.bgView.frame = ({//高度變化的快
//            CGRect frame = self.bgView.frame;
//            frame.size.width = self.originalFrame.size.width -yoffset;
//            frame.size.height = self.originalFrame.size.height * frame.size.width /self.originalFrame.size.width;
//            frame.origin.x = -(frame.size.width - self.originalFrame.size.width)/2;
//      frame.origin.y = 0;
//            frame;
//        });

    }

demo地址:https://github.com/charles1216/iOS-_f_QQ_xiala.git

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市棘催,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌耳标,老刑警劉巖醇坝,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異次坡,居然都是意外死亡呼猪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門砸琅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宋距,“玉大人,你說我怎么就攤上這事症脂⊙枋辏” “怎么了淫僻?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長壶唤。 經(jīng)常有香客問我雳灵,道長,這世上最難降的妖魔是什么闸盔? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任悯辙,我火速辦了婚禮,結果婚禮上迎吵,老公的妹妹穿的比我還像新娘躲撰。我一直安慰自己,他們只是感情好击费,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布拢蛋。 她就那樣靜靜地躺著,像睡著了一般荡灾。 火紅的嫁衣襯著肌膚如雪瓤狐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天批幌,我揣著相機與錄音础锐,去河邊找鬼。 笑死荧缘,一個胖子當著我的面吹牛皆警,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播截粗,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼信姓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了绸罗?” 一聲冷哼從身側響起意推,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎珊蟀,沒想到半個月后菊值,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡育灸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年腻窒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片磅崭。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡儿子,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出砸喻,到底是詐尸還是另有隱情柔逼,我是刑警寧澤蒋譬,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站卒落,受9級特大地震影響羡铲,放射性物質發(fā)生泄漏。R本人自食惡果不足惜儡毕,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一也切、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧腰湾,春花似錦雷恃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至附井,卻和暖如春讨越,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背永毅。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工把跨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人沼死。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓着逐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親意蛀。 傳聞我的和親對象是個殘疾皇子耸别,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

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