簡書的滑動懸停效果

2017-11-16 17_10_45.gif

最近,瀏覽簡書的時候,發現簡書iOS客戶端的個人主頁,有這種滑動懸停的效果,自己也想動手實現下。下面是我的實現效果:


2.gif
3.gif

整個代碼實現過程不復雜,復雜的是實現思路。如何實現推上去的效果,和實現tab分頁控件的懸停效果是重點。
11864689-97DB-47C9-8281-EE97E9E40CD4.png

方案一 :利用tableView的sectionHeader懸停效果

以下是實現思路:

一.分頁Tab控件的滑動懸停效果:
這部分當時想自定義個控件來實現,一直沒有找到合適的方法。后來網上看到,有人說在頂部放個大小一樣的Tab分頁控件先隱藏,當tabview滑動到頂部時,滑動的隱藏,原來隱藏的再出現,這樣也會有問題。后來我決定這部分能懸停的設置為tabview的sectionHeader,tableview設置為plain就可以實現懸停。
二.頂部導航欄被頂上去的效果:
以前做過的項目,用系統的導航欄,被坑過很多次。這次索性不用系統的導航欄,直接用和導航欄一樣高度的view充當假的導航欄。然后在tableview的UIScrollviewDelegate代理方法里,根據便宜量,改變導航欄view的transform。這個地方剛開始是改變transform的height,后來發現有問題,就改為改變transform的y。
三.底部可以橫向滑動的Tab和三個tableView:
分頁Tab是作為tableview的sectionHeader,然后它本身底層是個scrollview,上面放了三個Button。下面其實是一個很大的cell,cell里放了一個scrollview,sacrollview里又放了三個tableview。sectionHeader里的scrollview和cell里的scrollview實現滑動聯動。

這是整體結構圖:
B952DE38-7439-485A-9884-401A722F94C2.png

方案二 :將需要懸停部分當做cell的子視圖contentView,然后頂部懸浮地方,添加一個floatview。在floatview和cell之間切換子視圖。

aaa.jpg
bbbb.jpg

在scrollViewDidScroll代理方法中,實現切換:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    float ofsetY = scrollView.contentOffset.y;
    float limitY = self.headerView.frame.size.height + 40*5;
    if (ofsetY >= limitY) {
        [self.floatView addSubview:self.suspendCell.contentView];
        self.floatView.hidden = NO;
    } else {
        self.floatView.hidden = YES;
        [self.suspendCell addSubview:self.suspendCell.contentView];
    }
}

Demo地址

如有不對或者有待完善的地方,或者更好的實現思路,歡迎大家留言指正。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • *7月8日上午 N:Block :跟一個函數塊差不多,會對里面所有的內容的引用計數+1,想要解決就用__block...
    炙冰閱讀 2,547評論 1 14
  • -1- 分開快兩年了,不曾聯系。 恰巧在一個陌生的城市相遇,他看到她,她也看到了他。 喝了杯飲料后一起逛街,路過一...
    彧言堂閱讀 740評論 0 0
  • 人,從生,到長大,到結婚生子,到老,到死,“擁有”只是一個過程!開頭和結尾都只能赤條條! 而幸福,...
    于卓君閱讀 343評論 0 0
  • 烏鴉在天空中自由飛翔, 烏黑烏黑的就像夜未央。 一條條長長的銀色光芒, 打破了沉靜的基督教堂。 朝著紫霞彌漫開的海...
    彼得潘008閱讀 157評論 0 1