最近有人給個(gè)私活讓晚上加加班吧項(xiàng)目做了,由于價(jià)格原因沒(méi)談妥,在加上比較忙就沒(méi)有接,我看項(xiàng)目里面有些需求還是比較復(fù)雜的,比如日歷.
我在網(wǎng)上隨便找了找沒(méi)有找到令我滿(mǎn)意的demo,大部分小demo都沒(méi)有實(shí)現(xiàn) 無(wú)限滾動(dòng)功能 我沒(méi)有立馬集成git上的第三方而是自己擼一個(gè)有了自己的思路 以后有需求也好自定義. (git上確實(shí)有很多很有優(yōu)秀的庫(kù)但是作為一個(gè)開(kāi)發(fā)者總不能啥都git上拉一個(gè)按照文檔就用吧的知道原理還是比較好的)
我們看下圖 先簡(jiǎn)單從一個(gè)沒(méi)有做過(guò)寫(xiě)過(guò)日歷的開(kāi)發(fā)者分析一下遇見(jiàn)這個(gè)需求 我們的想法
1 我們看到下面這個(gè)日歷界面 首先應(yīng)為會(huì)想到這個(gè)界面應(yīng)該collectionView吧 但是仔細(xì)一想如果是 collectionView那么無(wú)限滑動(dòng)怎嘛實(shí)現(xiàn)呢?不可能collectionView有無(wú)數(shù)個(gè)section吧.
2 collectionView不行了,我們要解決的第一個(gè)問(wèn)題就是無(wú)限循環(huán) 怎嘛無(wú)限循環(huán)呢?
其實(shí)有種方法 還是比較簡(jiǎn)單的
我們界面初始化是下面這個(gè) 樣子的就是我們?cè)O(shè)置
[_scrollView setContentOffset:CGPointMake(SCREEN_WIDTH, 0) animated:NO]
向左或者向右滑動(dòng)再把偏移量 設(shè)置成CGPointMake(SCREEN_WIDTH, 0) 然后改變界面上的數(shù)據(jù)就會(huì)造成無(wú)限滾動(dòng)的假象,我們看到的永遠(yuǎn)是中間view上的數(shù)據(jù).
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
if (scrollView.contentOffset.x>SCREEN_WIDTH) { //向左滑動(dòng)
NSLog(@"+1");
}else if(scrollView.contentOffset.x<SCREEN_WIDTH){ //向右滑動(dòng)
NSLog(@"-1");
}
[_scrollView setContentOffset:CGPointMake(SCREEN_WIDTH, 0) animated:NO];
}

無(wú)限循環(huán)傳送門(mén)
3 說(shuō)完無(wú)限循環(huán) 接下來(lái)搞界面上的數(shù)據(jù),我們可以從后臺(tái)請(qǐng)求當(dāng)前時(shí)間(防止用戶(hù)搞事情),當(dāng)然也可也可以自己得到時(shí)間..我們看看我們都需要神馬
1我么需要知道 當(dāng)前 是xx年xx月xx天
2知道當(dāng)前月一共有幾天
3知道當(dāng)前月的第一天是 星期幾
知道這三個(gè)條件我們就可以對(duì)我們的界面 布局填充數(shù)據(jù)了.幸運(yùn)的是我們都可以根據(jù) NSCalendar 和 NSDateComponents就可以來(lái)得到你想要的條件
demo鏈接

