Privacy - Calendars Usage Description / 有助于您更好的管理日程
创新互联专注于网站建设,为客户提供做网站、网站制作、网页设计开发服务,多年建网站服务经验,各类网站都可以开发,高端网站设计,公司官网,公司展示网站,网站设计,建网站费用,建网站多少钱,价格优惠,收费合理。
通过 event.calendar.allowsContentModifications == YES 可以过滤节假日、节气等系统添加的日历。
由于我们手动添加的数据都是可以手动编辑的,所以event的allowsContentModifications这一只读属性刚好可以用到。
根据eventIdentifier 查找对应日历,没找到则重新创建,找如果有先删除在重新创建。
(1)唯一事件id(eventIdentifier)只读的问题:事件创建之后,系统自动创建eventIdentifier,而我们无法准确找到对应事件的 eventIdentifier。
(2)获取本地日历中的日程数据数据量可能会很大,导致与服务端返回的新数据进行匹配的时候双重for循环影响效率。
解决方案 :使用allowsContentModifications属性。由于我们手动添加的数据都是可以手动编辑的,所以event的allowsContentModifications这一只读属性刚好可以用到。可以减少很多系统日历自带的event对象,比如节假日、节气等等。
(1)基于地理位置的提醒
我们可以设定当用户进入或离开指定的地理位置区域时,触发日程提醒。例如当用户离开公司,提醒用户需要到超市购买日用品,作为开发者,需要确定一个经纬度以及一个半径范围。
1、 iOS 添加项目到系统日历
2、 iOS增、删、改、查系统提醒事件和日历事件
3、 iOS—EventKit实现app日程同步到本地日历(唯一id,过滤节假日)
- (NSInteger)firstWeekdayInThisMonth:(NSDate *)date{
NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar setFirstWeekday:1];//1.Sun. 2.Mon. 3.Thes. 4.Wed. 5.Thur. 6.Fri. 7.Sat.
NSDateComponents *comp = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:date];
[comp setDay:1];
NSDate *firstDayOfMonthDate = [calendar dateFromComponents:comp];
NSUInteger firstWeekday = [calendar ordinalityOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitWeekOfMonth forDate:firstDayOfMonthDate];
return firstWeekday - 1;
}
[img]做一个自己的日历
思路:整体用collectionView
难点:组织日期数据,分组背景效果,组头悬停效果
1.两层for循环,创建一个二维数组,第一层为月份,第二层为每个月下的天数。
2.计算起始日期之间一共有几个月,用于第一层数组。
3.计算各个月份一共有几天。并计算每月第一天是星期几,用来添加对应数量的空数据模型。对应天的model对象添加到每月的数组,构成第二层数组。
逻辑:选择开始日期和结束日期区间,开始日期标记为开始变红,结束日期标记为结束变红,两个日期之间的日期变紫。特殊情况:已经选择开始日期,选择结束日期比开始日期早,取消原来的开始日期,将这次点击变为选择开始日期,每次点击选择日期,item的model状态改变重新刷新collectionView
1.需要自定义装饰视图,继承UICollectionReusableView实现自定义视图
2.在自定义FlowLayout中注册自定义的装饰视图
3.因为每个collectionView的section背景装饰视图的月份是不同的,所以需要动态改变。不能直接传值,只能通过layoutAttributesForElementsInRect方法,添加装饰视图
iOS 9.0之后直接设置 flowLayout.sectionHeadersPinToVisibleBounds = true; 就可以。但是9.0之前需要自己手动在自定义FlowLayout中计算,组头悬停。可以参考下这老哥的
我的github地址demo:
就是 代码的例子。比如说你有不会用的控件,从网上下载这个控件的demo 照着敲两遍,在理解一下它的意思,就会了。
简单的模子。就是不需要实现细节,给别人看一个大致轮廓的东西。还有一层意思是很多功能中的一个,单独拿出来实现。
打开日历 按下下面中间的“日历” 把你想添加的在左边打上勾勾2026