iOS时间规则EKRecurrenceRule简单使用

作者: Thebloodelves | 来源:发表于2016-12-09 15:52 被阅读930次

写作原因:到第二家公司的时候首次看到我们的日程有这个功能,之前都没有用到过:

时间规则选择.gif 这是一个周期规则功能类;开始觉得很难,所以重构工程我把这个界面放到了偏后面;再加上我在简书上没有搜到相关的文章:
没有类似文章.png 所以我就想着自己写一篇,如果你们需要这个控制器或者文中提到的规则时间计算库可以在https://git.oschina.net/liyongshi.com/EKRecurrenceRuleDemo.git 下载

类简单预览

- (instancetype)initRecurrenceWithFrequency:(EKRecurrenceFrequency)type
                         interval:(NSInteger)interval 
                    daysOfTheWeek:(nullable NSArray<EKRecurrenceDayOfWeek *> *)days
                   daysOfTheMonth:(nullable NSArray<NSNumber *> *)monthDays
                  monthsOfTheYear:(nullable NSArray<NSNumber *> *)months
                   weeksOfTheYear:(nullable NSArray<NSNumber *> *)weeksOfTheYear
                    daysOfTheYear:(nullable NSArray<NSNumber *> *)daysOfTheYear
                     setPositions:(nullable NSArray<NSNumber *> *)setPositions
                              end:(nullable EKRecurrenceEnd *)end

绝大多数时候都是使用这个初始化函数,我们会按照type的不同来选择性的填写初始化参数;我们先来看看各参数是什么意思

type
typedef NS_ENUM(NSInteger, EKRecurrenceFrequency) {
    EKRecurrenceFrequencyDaily,//按天
    EKRecurrenceFrequencyWeekly,//按周
    EKRecurrenceFrequencyMonthly,//按月
    EKRecurrenceFrequencyYearly//按年
};

重复规则

interval

间隔单位,会根据type的不同用法也不一样

days

EKRecurrenceDayOfWeek类型,表示星期一、星期二...星期日,可以传入多个值

monthDays

一个月中的几号,可以传入多个值

months

一年中的几月,可以传入多个值

weeksOfTheYear

一年中的多少周,可以传入多个值

daysOfTheYear

一年中的多少号,可以传入多个值

setPositions

规则之外的数字,也就是除了上面的规则我还需要这些点也触发执行

end

EKRecurrenceEnd类型,标示规则结束;有次数(如只执行10次)和时间(如该时间后不再计算)两个选择

下面我就讲讲我的规则选择界面(文章开头的gif图)都填充了哪些参数来初始化;我们假设需要执行规则的时间为:2016-12-01到2016-12-31中的早上8:30到晚上6:30;下面我们以type的四种情况开始讲

EKRecurrenceFrequencyDaily

当type为EKRecurrenceFrequencyDaily时,填充interval和days
一:interval为6,days为nil;也就是每6天执行一次
我们用一个库来计算出所有的事件开始时间得到如下结果:

<__NSArrayM 0x600000455a80>(
2016-12-06 08:30:00 +0000,
2016-12-12 08:30:00 +0000,
2016-12-18 08:30:00 +0000,
2016-12-24 08:30:00 +0000,
2016-12-30 08:30:00 +0000
)

这个结果刚好就是每隔6天执行一次
二:interval为1,days为星期一...星期五;也就是每个工作日执行一次

<__NSArrayM 0x61000025e390>(
2016-12-01 08:30:00 +0000,
2016-12-02 08:30:00 +0000,
2016-12-05 08:30:00 +0000,
2016-12-06 08:30:00 +0000,
2016-12-07 08:30:00 +0000,
...
2016-12-26 08:30:00 +0000,
2016-12-27 08:30:00 +0000,
2016-12-28 08:30:00 +0000,
2016-12-29 08:30:00 +0000,
2016-12-30 08:30:00 +0000
)
EKRecurrenceFrequencyWeekly

当type为EKRecurrenceFrequencyWeekly时,填充interval和days;
一:interval为2,days为星期一和星期四;也就是我要每隔两周的星期一和星期四执行一次
我们将会得到如下结果:

<__NSArrayM 0x60800044f660>(
2016-12-01 08:30:00 +0000,
2016-12-12 08:30:00 +0000,
2016-12-15 08:30:00 +0000,
2016-12-26 08:30:00 +0000,
2016-12-29 08:30:00 +0000
)
EKRecurrenceFrequencyMonthly

当type为EKRecurrenceFrequencyWeekly时,填充interval和monthDays;
一:interval为1,monthDays为6;也就是每一个月的6号执行一次
我们得到:

<__NSArrayM 0x610000252150>(
2016-12-06 08:30:00 +0000
)

因为我们规定的时间只有12月,所以只有一个时间

EKRecurrenceFrequencyYearly

当type为EKRecurrenceFrequencyWeekly时,填充interval、monthDays和months,其中interval设置为1
一:monthDays为8,months为12;也就是每年的12月8号执行一次
我们会得到:

<__NSArrayM 0x618000453ef0>(
2016-12-08 08:30:00 +0000
)

结果当然也是对的,到现在我上面的规则选择界面就可以做出来了

补充

因为我们工程的规则选择界面还是比较简单的,所以就如上面所说就可以完成需求了;当然你也可以研究一些比较复杂的规则,不过一般上面这些已经够用了

相关文章

  • iOS时间规则EKRecurrenceRule简单使用

    写作原因:到第二家公司的时候首次看到我们的日程有这个功能,之前都没有用到过: 类简单预览 绝大多数时候都是使用这个...

  • 技术博客

    iOS简单国际化的处理 collectionView的规则流水布局与不规则流水布局 iOS消息推送机制 iOS知识...

  • 2019-01-08

    ios AVPlayerViewController简单使用 要使用AVPlayerViewController需...

  • 多线程:iOS中的多线程实现方案

    一、iOS的多线程方案二、NSThread的简单使用三、NSOperation的简单使用 一、iOS的多线程方案 ...

  • IOS12 捷径换区

    iOS11的老版workflow规则在iOS12上已经失效了,需要新的规则 点击下面链接,添加到捷径库中使用即可 ...

  • iOS开发-音频播放

    iOS--音频的简单使用 音效播放(短时间的音频文件)1:AudioServicesCreateSystemSou...

  • iOS音频合成(音频拼接)

    iOS 音频拼接 简单使用 简单音频拼接介绍: http://www.cocoachina.com/ios/201...

  • 无标题文章

    iOS 缓存 快速集成环信 技术文档 Masonry简单使用 MJExtension简单使用 GCD基本使用 gi...

  • 2019-03-05

    iOS 数据持久化方案-Realm的使用 - 简书 Realm在iOS中的简单使用 - 简书

  • AntDesign Form表单字段校验的三种方式

    1.使用getFieldDecorator的rules规则 最简单的方法就是使用getFieldDecorator...

网友评论

    本文标题:iOS时间规则EKRecurrenceRule简单使用

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