用UILocalNotification实现一个闹钟(Swift)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用UILocalNotification实现一个闹钟(Swift)相关的知识,希望对你有一定的参考价值。

之前项目需求要实现一个闹钟,github上找了半天发现都是很旧的代码了,所以就准备自己写一个,刚好最近在学习Swift,就用Swift写了一个demo放在这里:https://github.com/Phelthas/Demo_AlarmClock   效果如图:
技术分享        技术分享
 
总结一下,备忘
 
界面的话一个DatePicker加7个UIButton就搞定了,稍微有点问题的是如何表示哪几天选中了,哪几天没选中。
这里可以用数组实现,也可以用集合,但最简单的是用一个16进制数来表示(也是github上看来的,原来自己用数组写了一大坨。。。)即用0x111 1111 来表示全部选中,用0x000 0000 来表示全部没选中,每一个1表示选中一天。
然后就可以移位运算符来运算button的selected,来表示这个button有没有被选中
 
闹钟的话还是用UILocalNotification来实现。需要注意的是,UILocalNotification的重复间隔只能是苹果定义的一些值( NSCalendarUnit),且间隔不能太小(秒不管用),且每个app能设置的UILocalNotification个数有上限(貌似是128个)
所以这里一个通知只能让闹钟每周X的同一个时间响,如果要一个闹钟周一周二都响,就要定义2个UILocalNotification,如果7天都要响,就要7个通知。。。目前还真不知道有什么其他的办法,如果有知道的同学,望不吝赐教
 
确定周几响的时候,需要根据NSCalendar来计算,用dateComponents的方式,这里需要注意的是苹果定义的周日的weekday是1(即认为周日是一周第一天),而我们一般习惯把周一作为每周的第一天,所以计算的时候需要转换一下,转换方法见demo
 
添加通知的时候,要给通知设置userInfo,将通知的identifier设置进去,作为通知的唯一标示符,否则无法取消;
这里我是将通知的时间的时间戳作为一个字符串来作为这个通知的identifier 

 

 

计划2016年每个月至少写一篇博客的,结果第一篇就拖到月底了。。。以后争取早一点!

 

以上是关于用UILocalNotification实现一个闹钟(Swift)的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发中UILocalNotification实现本地通知实现提醒功能

UILocalNotification 或 EventKIt

尝试实现 beginBackgroundTaskWithExpirationHandler 和 UILocalNotification

如何使用 iOS 8 弃用设置每周重复的 UILocalNotification?

iOS开发中UILocalNotification本地通知实现简单的提醒功能

如何设置 UILocalNotification 连续 30 天