新浪微博個(gè)人主頁(yè)效果 - 解題思路 & 代碼

背景

  • 做了這么多久的開(kāi)發(fā),也一直沒(méi)能靜下心來(lái)寫(xiě)點(diǎn)什么。主要還是覺(jué)得自己的文筆不好,有些東西不能很清楚的表達(dá)出來(lái)。再者,現(xiàn)在很多東西什么的一搜一大堆,再寫(xiě)確實(shí)沒(méi)多大意思。當(dāng)然,最重要的一點(diǎn),我比較懶。。。所以,也就一直沒(méi)有寫(xiě)點(diǎn)什么東西出來(lái)。

  • 再之前的一次面試中,面試官問(wèn)到新浪微博個(gè)人主頁(yè)的實(shí)現(xiàn),說(shuō)他研究了很久,還是沒(méi)能完美實(shí)現(xiàn)這種效果,說(shuō)網(wǎng)上也沒(méi)有這種效果的demo。我當(dāng)時(shí)很震驚,啥,網(wǎng)上居然沒(méi)這類(lèi)效果?然后,淺談了一下我的思路,再然后,讓我回去寫(xiě)個(gè)這效果的demo發(fā)他。我當(dāng)時(shí)就郁悶了,你這是招人呢還是找人給你解決問(wèn)題?然后就沒(méi)有然后了。。。

  • 今天無(wú)意中突然想到這個(gè)問(wèn)題,然后,下載新浪app再研究了一下,發(fā)現(xiàn)其實(shí)原理很簡(jiǎn)單,好吧,既然這樣,那就開(kāi)擼吧,我的處女作啊。希望對(duì)大家有幫助。寫(xiě)得不好的地方,還請(qǐng)大家多多包涵。。

做好的的效果圖

123.gif

先簡(jiǎn)單的說(shuō)下結(jié)構(gòu)和原理

  • 我這地方采用的橫向滾動(dòng)的UICollectionView + 縱向UITableView(tableView的headerView設(shè)置一個(gè)view大小與headView尺寸一致) + headView + catalogView
@property (nonatomic, strong) UICollectionView *collectionView;
@property (nonatomic, strong) SMPHeaderView *headerView;
@property (nonatomic, strong) SMPCatalogView *catalogView;
@property (nonatomic, strong) NSArray *catalogs;
  • 當(dāng)橫向滾動(dòng)的時(shí)候。headerView 移動(dòng)到 collectionView 同層級(jí),這時(shí)候的collectionView橫向滾動(dòng)不會(huì)影響到headerView。同時(shí),發(fā)出通知。同步其他tableView 的y偏移
//當(dāng)前橫向滾動(dòng)
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGRect rect = [self.headerView convertRect:self.headerView.bounds toView:self.view];
    [[NSNotificationCenter defaultCenter] postNotificationName:@"contentOffset" object:@(rect.origin.y)];
    if([self.headerView superview] == self.view) return;
    [self.view addSubview:self.headerView];
    [self.headerView mas_remakeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(@(rect.origin.y));
        make.left.right.equalTo(self.view);
        make.height.equalTo(@(K_HEADER_HEIGTH));
    }];
}

  • 當(dāng)縱向滾動(dòng)時(shí)。headerView移動(dòng)到tableView 的header上,達(dá)到同步滾動(dòng)效果
- (void)tableViewDidScroll:(UITableView *)tableView {
    if([self.headerView superview] == tableView.tableHeaderView) return;
    [tableView.tableHeaderView addSubview : self.headerView];
    [self.headerView mas_remakeConstraints:^(MASConstraintMaker *make) {
        make.left.top.bottom.right.equalTo(tableView.tableHeaderView);
    }];
    [tableView.tableHeaderView layoutSubviews];
}
  • 做到這一步,headView 基本就能橫向操作不動(dòng),縱向一起動(dòng)。原理和結(jié)構(gòu)是不是還算比較簡(jiǎn)單?如果你沒(méi)能理解,這說(shuō)明是我的表達(dá)上有問(wèn)題。

其他

  • 這篇文章主要是提供這樣的一個(gè)解題思路,所以具體的實(shí)現(xiàn)方式以及細(xì)節(jié)上的,我就不詳細(xì)介紹和實(shí)現(xiàn)了,有些地方也不是完全參照新浪來(lái)的,比如類(lèi)目數(shù)量相對(duì)靈活一點(diǎn)(因?yàn)橹懊嬖嚬僬f(shuō)的,他寫(xiě)的不好擴(kuò)展個(gè)數(shù),也不知道他是怎么實(shí)現(xiàn)的)
  • 如果理解思路的朋友們,可以自己嘗試寫(xiě)一下,不理解的朋友,可以下載demo看看。。如果到最后,還是不能理解。。我只能說(shuō)抱歉了啊。。

代碼地址

https://github.com/helfyz/SinaMainPage
覺(jué)得對(duì)你有幫助的朋友,麻煩加下星,最近找工作中,大家懂的。。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,663評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,125評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 175,506評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,614評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,402評(píng)論 6 404
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 54,934評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,021評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,168評(píng)論 0 287
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,690評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,596評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,784評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,288評(píng)論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,027評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,404評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,662評(píng)論 1 280
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,398評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,743評(píng)論 2 370

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,147評(píng)論 4 61
  • “你這東西怎么賣(mài)的呀?” “這個(gè)我賣(mài)別人55,你我直接賣(mài)50吧。” “這么貴啊,人別家才賣(mài)25呢!你給便宜點(diǎn)。” ...
    由山木閱讀 445評(píng)論 0 0
  • 1.下載安裝Wamp(一般不要安裝在C盤(pán)) 一直下一步安裝完成, 安裝完成之后啟動(dòng),右下角圖標(biāo)變綠 說(shuō)明安裝成功;...
    Swimming_cat閱讀 692評(píng)論 0 2
  • 品味鐵塔,蕩滌心靈 ——機(jī)械學(xué)院聚焦中原實(shí)踐隊(duì) 一進(jìn)大門(mén),就讓人眼前一亮,仿佛走進(jìn)了一個(gè)神奇的世外桃源,優(yōu)雅別致的...
    岳小白他爸爸閱讀 176評(píng)論 0 0
  • 記錄一下今天的工作吧! 早上匆匆忙忙地要趕在9:00之前到辦公室。因?yàn)榘l(fā)現(xiàn)辦公室的兩個(gè)小孩經(jīng)常遲到,我估計(jì)他們是需...
    喻靜靜閱讀 251評(píng)論 0 0