美文网首页随笔-生活工作点滴
iOS 日历控件、仿企业微信打卡记录

iOS 日历控件、仿企业微信打卡记录

作者: 姬歌 | 来源:发表于2019-07-05 22:35 被阅读4次

    打卡记录、通用日历
    因为日期格式为yyyy-MM-dd,所以日历可输入的日期范围为1000-9999年。
    如果有需要也可以自己加几行代码调整为1-9999。公元前的,就比较难一点了,首先要对日历知识比较了解才行。
    效果图

    效果1

    选中的日期显示白色阴影;选中某个日期时,底部显示其打卡信息。

    效果2-无打卡记录&今天

    ‘今天’是7月5号,显示半透明阴影。

    主要构造:

    scrollView做容器,设置pageEnale = YES,里面装3个固定、相同高度的日历控件monthView。从上到下依次为monthView1,monthView2,monthView3。也就是monthView2处于中间位置,并自动将scrollView滚动到中间。monthView2显示月份(比如当前月份)M7,monthView1装载上一个月M6,monthView3装载下一个月M8。总之monthView2是核心,是参考物。每次设定monthView2数据后以此计算出上、下月。
    向上滚动到monthView1,可以看到M6月份日历,当滚动停止时,重新设定monthView的年月值,让monthView2显示M6月份,monthView1装载M5,monthView3装载M7;重新设置scrollview的contentOffset,让其滚动到monthView2。这样,当滚动停止时,用户一直看到的是M6月份日历,但实际monthView1控件已经被替换monthView2,这样一来,用户又可以向上、向下滚动了 !体验上会觉得是可无限滚动的日历!而且每次滚动后,其上下月份是正确、连续的。
    底部是另外控件footerView,用于显示打卡信息。当monthView底部空白太多时,将footerView上移遮盖空白处。

    monthView内部构造:

    里面包含3个子图层,frame都是等于self.bounds
    控件内包含42个日期,参见效果图1,6行,每行7个日期。根据条件显示、隐藏。
    最底层:包含2个阴影showdowView,一个用来标识【今天】,一个用来标识(点击)选中的月份;通过隐藏、显示、坐标变换showdowView,去实现需求。
    中间层:包含圆点,用于标识打卡状态;打卡正常,显示浅蓝圆点;打卡异常,显示红色;无打卡记录,隐藏圆点。

    github下载链接

    相关文章

      网友评论

        本文标题:iOS 日历控件、仿企业微信打卡记录

        本文链接:https://www.haomeiwen.com/subject/ttgyhctx.html