最近有人给个私活让晚上加加班吧项目做了,由于价格原因没谈妥,在加上比较忙就没有接,我看项目里面有些需求还是比较复杂的,比如日历.
我在网上随便找了找没有找到令我满意的demo,大部分小demo都没有实现 无限滚动功能 我没有立马集成git上的第三方而是自己撸一个有了自己的思路 以后有需求也好自定义. (git上确实有很多很有优秀的库但是作为一个开发者总不能啥都git上拉一个按照文档就用吧的知道原理还是比较好的)
我们看下图 先简单从一个没有做过写过日历的开发者分析一下遇见这个需求 我们的想法
1 我们看到下面这个日历界面 首先应为会想到这个界面应该collectionView吧 但是仔细一想如果是 collectionView那么无限滑动怎嘛实现呢?不可能collectionView有无数个section吧.
2 collectionView不行了,我们要解决的第一个问题就是无限循环 怎嘛无限循环呢?
其实有种方法 还是比较简单的
我们界面初始化是下面这个 样子的就是我们设置
[_scrollView setContentOffset:CGPointMake(SCREEN_WIDTH, 0) animated:NO]
向左或者向右滑动再把偏移量 设置成CGPointMake(SCREEN_WIDTH, 0) 然后改变界面上的数据就会造成无限滚动的假象,我们看到的永远是中间view上的数据.
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
if (scrollView.contentOffset.x>SCREEN_WIDTH) { //向左滑动
NSLog(@"+1");
}else if(scrollView.contentOffset.x<SCREEN_WIDTH){ //向右滑动
NSLog(@"-1");
}
[_scrollView setContentOffset:CGPointMake(SCREEN_WIDTH, 0) animated:NO];
}
658A3E1C-B1E8-424D-94FC-2D5D4BCE0570.png
无限循环传送门
3 说完无限循环 接下来搞界面上的数据,我们可以从后台请求当前时间(防止用户搞事情),当然也可也可以自己得到时间..我们看看我们都需要神马
1我么需要知道 当前 是xx年xx月xx天
2知道当前月一共有几天
3知道当前月的第一天是 星期几
知道这三个条件我们就可以对我们的界面 布局填充数据了.幸运的是我们都可以根据 NSCalendar 和 NSDateComponents就可以来得到你想要的条件
demo链接
网友评论