美文网首页
iOS---记一次写日历的心得

iOS---记一次写日历的心得

作者: 乐逍遥的笔记 | 来源:发表于2017-11-13 11:31 被阅读32次

因为最近项目的需求中需要做一个日历,效果类似于钉钉日历中的那种效果,下滑展开可以进行按月份滑动,上滑可以让日历收缩,滑动效果按周进行滑,之前也看了好多的Demo,但总觉得效果不适合自己想要的,所以就想自己尝试写一个,Demo中有各种瑕疵,还请各位不瑟吝教。这篇文章主要是将写日历的整个过程分享给需要的朋友们。

日历的主体部分主要使用到了UICollectionView,NSCalendar,NSDate,NSDateComponents这几个比较核心的类,但是也相应用到了其他东西。在此之前,也对其中几个类做了一些了解吧。

NSCalendar这个类提供给了开发者一些方法来获取日期对象(NSDate)的年月日时分秒的信息。例如在本次Demo中,要用的是获取当前时间:NSCalendar *calendar = [NSCalendar currentCalendar];

NSDateComponents也是和日期相关的一个类,从字面意思上,Components是零件组成的意思,他是配合NSCalendar,NSDate这两个类把一个日期分割成年月日时分秒的。

例如:在获取当前时间的时候

NSCalendar *calendar = [NSCalendar currentCalendar];

NSDateComponents  *components  =  [calendar components:NSCalendarUnitMinute | NSCalendarUnitMonth | NSCalendarUnitHour | NSCalendarUnitDay fromDate:[NSDate date]];

NSLog(@"%ld月%ld日%ld时%ld分" ,(long)components.month,(long)components.day,(long)components.hour,(long)components.minute);

因为在这个日历中需要用到的一些工具类方法比较多,所以单独封装了一个类,来获取当月日期、上个月下个月有几天、本月的第一天从周几开始等等的一些方法:

/**

枚举出所有的时间类型

TimeType_Year,年

TimeType_Month,月

TimeType_Day,日

TimeType_Hour,时

TimeType_Minite,分

TimeType_Second,秒

*/

typedef enum : NSUInteger {

TimeType_Year,

TimeType_Month,

TimeType_Day,

TimeType_Hour,

TimeType_Minute,

TimeType_Second,

} TimeType;

@interface SXYDateToolsObject : NSObject

+ (SXYDateToolsObject *)manager;

/**

获取当前日期所在周最后一天(日-六 也就是周六)

@param date 当前日期

@return 返回日期

*/

- (NSDate *)getLastdayOfTheWeek:(NSDate *)date;

/**

获取当天是周几

@param date 当天日期

@return 周数(1-7  ->  日-六)

*/

- (NSInteger)getNumberInWeek:(NSDate *)date;

/**

返回传入时间月份第一天

@param pDate 传入时间

@return 第一天

*/

- (NSDate *)GetFirstDayOfMonth:(NSDate *)pDate;

/**

* 时间返回字符串

*/

- (NSString *)getStrFromDateFormat:(NSString *)format Date:(NSDate *)date;

/**

* 获取上个月的时间

*/

- (NSDate*)getPreviousMonth:(NSDate*)_date;

/**

* 获取下一个月的时间

*/

- (NSDate*)getNextMonth:(NSDate*)_date;

/**

* 获取本月第一天是星期几

*/

- (NSInteger)currentFirstDay:(NSDate *)date;

/**

* 获取本月总天数

*/

- (NSInteger)currentMonthOfDay:(NSDate *)date;

/**

* 判断两个月份是不是一样的

*/

- (BOOL)checkSameMonth:(NSDate*)_month1 AnotherMonth:(NSDate*)_month2;

/**

* 获取一个月有多少行

*/

- (NSInteger)getRows:(NSDate *)myDate;

/**

* 字符串返回时间

*/

- (NSDate *)getDataFromStrFormat:(NSString *)format String:(NSString *)str;

/**

* 判断两天是不是同一天 //固定yyyy-mm-dd

*/

- (BOOL)checkSameDate:(NSString *)date1 AnotherDate:(NSDate *)date2;

/**

* 判断两天是不是同一天

*/

- (BOOL)isSameDate:(NSDate *)date1 AnotherDate:(NSDate *)date2;

/**

* 获取某天零点时间

*/

- (NSDate *)getStartDateWithDate:(NSDate *)date;

/**

将时间字符串转换成新的时间字符串

@param oldStrDate 旧的时间

@param oldFormat 旧的格式

@param newFormat 新的时间格式

@return 返回

*/

- (NSString *)getStrDateFromStrDate:(NSString *)oldStrDate OldFormat:(NSString *)oldFormat ByNewFormat:(NSString *)newFormat;

/**

获取某个时间前后时间

@param currentDate 当前时间

@param lead 距离时间 正数往后推  负数往前推

@param timeType 时间类型(0-年  1-月 2-日 3-时 4-分 5-秒)

@return 返回结果时间

*/

- (NSDate *)getEarlyOrLaterDate:(NSDate *)currentDate LeadTime:(NSInteger)lead Type:(TimeType )timeType;

Demo参考地址:http://code.cocoachina.com/view/136268

相关文章

  • iOS---记一次写日历的心得

    因为最近项目的需求中需要做一个日历,效果类似于钉钉日历中的那种效果,下滑展开可以进行按月份滑动,上滑可以让日历收缩...

  • 用Application Loader 上传的时候报错

    iOS---用Application Loader 上传的时候报错No suitable application ...

  • 写日历

    昨天我写了日历,它是2020年的日历,我只写了现在的月份,也就是2月。 我就根据数学书上的日历写,...

  • 还是改为周记吧

    昨天在日记中信誓旦旦地要每天写日记。可是感觉自己不是每天都有东西要写。还是改为周记。一周总结一次,写一次感想和心得...

  • 阅读打卡:《鲁滨逊漂流记》

    车知儒阅读《鲁滨逊漂流记》时长:6分钟页数:162到167 心得:根据我自制的日历,我在1686年12月19日离开...

  • 2018-04-20

    培训心得 这是第三次在这写自己培训心得,刚刚我自己翻回去看看自己去年写的心得,感觉自己的身心又净化了一次,如...

  • SmartRefreshLayout+RecyclerView

    记一次SmartRefreshLayout+RecyclerView 实现上拉加载更多和下拉刷新心得。 Smart...

  • 很棒的体验

    哎呦,貌似上一次写心得体会还是单位要求的,文字描述很官方的那种。这种文章,我一直不擅长,最后找别人求助才搞定。 记...

  • 20190325-31第五周检视

    分享上周践行心得和收获 1.日历 本周我是否完成重要的日历系项,有没有变更固定事项? 日历上事项基本完成, 2.清...

  • 20190422-28第9周检视

    分享上周践行心得和收获 1.日历 本周我是否完成重要的日历系项,有没有变更固定事项? 日历上事项基本完成, 2.清...

网友评论

      本文标题:iOS---记一次写日历的心得

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