下拉頭部-模仿微信聊天頭部拉下小程序效果

最近做了一個模仿微信聊天界面頭部下拉出現小程序的效果,同時也可以通過頭部的按鈕控制彈出框的伸縮,GitHub傳送門

先上效果:

滑動.gif

下面講下我的思路:

1.通過runtime的關聯方法

runtime-AssociatedObject

對UIScrollview寫一個擴展類,增加一個UIView的屬性,frame設置在UIScrollview的頭部。

2.然后UITableView的tableHeaderView這個屬性來實現的,因為怎么想都覺得這只是一個頭部的視圖,往下拉時,通過對tableview的滑動時的delegate回調,通過設置tableview的

- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated;

這個方法直接偏移位置就行了,但是tableview的數據如果不是足夠多到能鋪滿一個屏幕的話,比如UITableViewCell只有2條的時候,設置[_tableView setContentOffset:CGPointMake(0, -100)]時,tableview的contentOffset還是在(0, 0)的位置。

折騰了許久后,想起MJRefresh的下拉刷新效果,然后參照MJRefreshHeaderView寫了一個繼承于MJRefreshBaseView的類LFTableHeaderView,通過對UIScrollview的KVO監(jiān)聽,設置當前彈出視圖的狀態(tài)state,以及臨界點的判斷,重寫該state屬性,實現對應的動畫(不了解的童鞋可以詳讀MJRefresh源碼),并在LFTableHeaderView中加入了一個自定義的view,這樣基本彈出效果的功能也就實現了,可以通過


來設置頭部的展示與隱藏。

3.然后就是上面點擊按鈕的收拉頭部的功能,以及滾動時按鈕箭頭的轉向,我是通過對UIScrollview的擴展類新增了一個NSNumber* isShowLFHeader的屬性來記錄當前的狀態(tài)(本來用BOOL的,但是objc_getAssociatedObject會報錯,需要以NSObject,就改用NSNumber),當展開時設置該值為@1,隱藏時為@0。

4.至于里面的CollectionView就是個小視圖的功能了,因為業(yè)務需要,添加了右上角的角標設置,使用時直接使用

_tableView.lf_header.badgeNumArr = @[@"20",@"1",@"101",@"2",@"0",@"0"];

即可。

第一次寫文章,語言的表述不好,講重點也沒抓好,希望以后能提高。感悟就是還需多閱讀大佬的源碼,站在巨人肩膀上真的能事半功倍!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網絡請求組件 FMDB本地數據庫組件 SD...
    陽明AI閱讀 16,229評論 3 119
  • 1.ios高性能編程 (1).內層 最小的內層平均值和峰值(2).耗電量 高效的算法和數據結構(3).初始化時...
    歐辰_OSR閱讀 30,282評論 8 265
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,684評論 1 32
  • 一個紙團, 跟著另一個紙團, 以或優(yōu)美或生硬的路線, 走向垃圾筐。 一團團思緒, 從糾結的雙眉間, 以或留戀或決絕...
    光影剪刀手閱讀 327評論 0 4
  • 今天我們班來了個同學叫王雨,一個愛學習的女孩。老師告訴同學們,下課跟她一塊玩游戲。她挨著馬凱,我相信她很快和大家成...
    楊騰晉閱讀 214評論 0 0

友情鏈接更多精彩內容