iOS 新浪微博個人主頁 效果完美實現(xiàn) 思路及代碼

在網(wǎng)上看到一些寫新浪微博個人主頁的實現(xiàn)思路和代碼的文章宴凉,實際按他們的思路來做項目的時候發(fā)現(xiàn)有些效果跟真正的新浪微博不太一樣琼梆。特別是頭視圖與幾個subTableView的交互效果度液,比如有些demo的頭視圖無法實現(xiàn)懸停豆巨,有的demo頭視圖無法點擊響應事件或者上下滾動浅浮,有些Demo無法左右滾動幾個subTableView的同時保持頭視圖不動暴浦。

后來經(jīng)過各種嘗試,終于自己在項目中將所有效果都實現(xiàn)了崇败,現(xiàn)在把思路和代碼分享下盅称。

一、頁面交互效果分析:

1.主頁面上下滑動時是在一個subTableView中滑動后室,左右滑動是切換到其他的subTableView缩膝;

2.有一個頭部headerView,無論哪個subTableView上下滑動岸霹,頭部視圖都會貼著隨之上下運動疾层,而且向下滾動到極限時帶彈性效果;左右滑動的時候subTableView時松申,headerView的位置固定不變云芦;

3.headerView上滑時慢慢消失俯逾,露出導航欄,下拉時慢慢出現(xiàn)舅逸,導航欄消失桌肴;header頭部視圖滑動到頂部時上面自帶的子菜單欄會懸停在導航欄下方;選擇子菜單欄能夠切換subTableView琉历;

image

4.在headerView區(qū)域觸摸也可以上下滾動坠七,效果和在subTableView上的滾動效果一模一樣;headerView區(qū)域有各種控件旗笔,點擊有事件響應彪置;

5.如果headerView滾到最頂部即子菜單欄處于懸停狀態(tài),切換subTableView時蝇恶,各subTableView的滾動位置不變拳魁;否則,滾動時第二個subTableView會自動滾動到頂部撮弧;

image

6.navigationBar和title的透明度效果變化:第一個使用的是動態(tài)添加透明度變化的backGroundImage潘懊,第二個是動態(tài)改變titleView的alpha

二、實現(xiàn)思路及主要代碼:

1.要想實現(xiàn)頁面中的subTableView手勢上下左右滾動效果贿衍,必然是要將幾個subTableView加載到一個水平方向滾動的horizontalScrollView上授舟;

// 水平滾動的containScrollView

view.addSubview(containScrollView)

// 第1個tableView

let firstVC = HLProfileTableViewController.init(style: UITableViewStyle.grouped) firstVC.coverHeight = cacu_coverHeight + seperatorLineHeight containScrollView.addSubview(firstVC.view)

self.addChildViewController(firstVC)

//        第2個tableView        

let secondVC = HLWeiboTableViewController.init(style: UITableViewStyle.grouped) secondVC.coverHeight = cacu_coverHeight + seperatorLineHeight containScrollView.addSubview(secondVC.view) self.addChildViewController(secondVC)

//        第3個tableView    

let thirdVC = HLNewsTableViewController.init(style: UITableViewStyle.grouped)         thirdVC.coverHeight = cacu_coverHeight + seperatorLineHeight         containScrollView.addSubview(thirdVC.view)      

self.addChildViewController(thirdVC)

// 頭部視圖放在主視圖的最外面

view.addSubview(headerView)

headerView.frame = CGRect.init(x: 0, y: 0, width: ScreenW, height: headerHeight)

2.headerView的層級,根據(jù)它的UI交互方式贸辈,作為subTableView的子視圖的方式非常難以處理释树,這里是放在控制器主視圖的最外層。這樣subTableView水平滾動時它可以不會受影響擎淤;subTableView上下滾動的時候使用代理動態(tài)的調(diào)整headerView的高度即可奢啥;

var transform_y = scrollView.contentOffset.y

//tableView同步的滾動極限

let scrollLimit = cacu_coverHeight - switchMenuHeight + seperatorLineHeight if transform_y > scrollLimit {

  transform_y = scrollLimit             navigationController?.navigationBar.isTranslucent = false         }else{        

navigationController?.navigationBar.isTranslucent = true  

  }         navigationController?.navigationBar.setBackgroundImage(self.imageWithColor(color: UIColor.init(white:1 , alpha: transform_y/scrollLimit)), for: UIBarMetrics.default)                  titleLabel.textColor = UIColor.init(white:0 , alpha: transform_y/scrollLimit)  

    //        因為有個seperatorLine,所有scrollView的滾動范圍有可能小于帶上switchMenuHeight的總高度嘴拢,    

if headerHeight - transform_y < switchMenuHeight + CYTStatusBarHeight + CYTNavigationBarHeightForSwi {

// 如果滾到范圍到了小于switchMenuHeight高度的時候扫尺,headerView高度保持不變

headerView.frame = CGRect.init(x: 0, y: 0, width: ScreenW, height: switchMenuHeight + CYTStatusBarHeight + CYTNavigationBarHeightForSwi)

}else{            

headerView.frame = CGRect.init(x: 0, y: 0, width: ScreenW, height: headerHeight - transform_y)

}

3.headerView上的UI交互方式處理方式如下:使用HitTest方法進行判斷,如果headerView的子視圖需要進行UI交互炊汤,就讓該視圖接收手勢;否則就返回nil弊攘,也即是將手勢方法傳遞到headerView下面的tableView上抢腐,這樣headerView不點擊子視圖只是上下滾動就和直接滾動tableView效果一樣。代碼:

 override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        
        //需要交互的元素襟交,點擊時觸發(fā)點擊響應
        for view in interactionItems {
            if view.frame.contains(point){
                return view
            }
        }
        
        //點擊需要交互的元素以外的區(qū)域迈倍,不觸發(fā)點擊響應
        return nil
    }

代碼GitHub地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市捣域,隨后出現(xiàn)的幾起案子啼染,更是在濱河造成了極大的恐慌宴合,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迹鹅,死亡現(xiàn)場離奇詭異卦洽,居然都是意外死亡,警方通過查閱死者的電腦和手機斜棚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門阀蒂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弟蚀,你說我怎么就攤上這事蚤霞。” “怎么了义钉?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵昧绣,是天一觀的道長。 經(jīng)常有香客問我捶闸,道長夜畴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任鉴嗤,我火速辦了婚禮斩启,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘醉锅。我一直安慰自己兔簇,他們只是感情好,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布硬耍。 她就那樣靜靜地躺著垄琐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪经柴。 梳的紋絲不亂的頭發(fā)上狸窘,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天,我揣著相機與錄音坯认,去河邊找鬼翻擒。 笑死,一個胖子當著我的面吹牛牛哺,可吹牛的內(nèi)容都是我干的陋气。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼引润,長吁一口氣:“原來是場噩夢啊……” “哼巩趁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起淳附,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤议慰,失蹤者是張志新(化名)和其女友劉穎蠢古,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體别凹,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡草讶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了番川。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片到涂。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖颁督,靈堂內(nèi)的尸體忽然破棺而出践啄,到底是詐尸還是另有隱情,我是刑警寧澤沉御,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布屿讽,位于F島的核電站,受9級特大地震影響吠裆,放射性物質(zhì)發(fā)生泄漏伐谈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一试疙、第九天 我趴在偏房一處隱蔽的房頂上張望诵棵。 院中可真熱鬧,春花似錦祝旷、人聲如沸履澳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽距贷。三九已至,卻和暖如春吻谋,著一層夾襖步出監(jiān)牢的瞬間忠蝗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工漓拾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留阁最,地道東北人。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓骇两,卻偏偏與公主長得像闽撤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子脯颜,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

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

  • 代碼創(chuàng)建UIWindow對象 Xcode7之后使用代碼創(chuàng)建UIWindow對象: //創(chuàng)建UIWindow對象 s...
    云之君兮鵬閱讀 1,329評論 0 2
  • 1.badgeVaule氣泡提示 2.git終端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夾內(nèi)容...
    i得深刻方得S閱讀 4,670評論 1 9
  • 早晨刷了8千步,5km贩据。 我不是計數(shù)狂栋操,充滿大數(shù)據(jù)的生活時代闸餐,數(shù)字也是音符的別樣表達。于是矾芙,每天都有不同的旋律舍沙。 ...
    Sunny飛鏡閱讀 694評論 2 0
  • 盡管包了好幾層塑料袋,還是有一點汁漏出來剔宪,不像瓶底壞了的樣子拂铡,很輕松地打開那一刻才知道,是蓋子...
    花果珊珊沒來遲閱讀 342評論 0 0
  • 1. 餐廳29桌坐著的是一個年輕的媽媽和她大概四五歲的兒子葱绒,還有一個女孩感帅,大概是親戚家的 四人桌,媽媽坐在一邊地淀,兩...
    Little明閱讀 163評論 0 0