之前项目需求要实现一个闹钟,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)的更多相关文章

  1. Python:一个闹钟

    随着一个<霍格沃茨:一段校史>风格的大字(呃,这字好像并不大--)标题的出现,无聊的我没事干,又开始整活了~ 之前我做的程序,一个使用了Tkinter库,一个则是Pygame,总之都是带有 ...

  2. 来用python自己做一个闹钟吧

    闹钟 是一种具有可以在预先设定的时间被激活以响铃的功能的时钟,用于唤醒打工人们. 使用Python中的DateTime模块来创建闹钟,并用Python中的playsound库来播放闹钟声音.~~~## ...

  3. Android得到一个闹钟在第三方

    收集报警信息 闹铃时间,闹铃备注信息 闹铃引起系统变化的点: 1. Send Notification (正点闹钟能够设置不发送) 2. Play audio 闹铃信息结构体 ClockInfo{ S ...

  4. 编写一个闹钟和定时关机工具(MFC VS2010)

    这个小工具在自己生活当中能用到,运行软件以后,会显示当前的系统时间,然后你可以设定时间,再选择是定时响铃还是关机.截图如下: 前言:本程序采用visual studio 2010 ,对话框类型的应用程 ...

  5. 仅用递归函数操作逆序一个栈(Swift 4)

    /// 取出栈底的数 func getAndRemoveLastElement(_ items: inout [Int]) -> Int { let value = items.remove(a ...

  6. iOS开发点滴 - 如何通过Segue写代码传递数据从一个ViewController到另一个ViewController(Swift代码)

    1. 拖线 按住Control键,用鼠标从源控制器的某个控件开始,拖动到目的控制器 2. 选择弹出类型并设置Segue Identifier 在弹出的对话框中,选择“Selection Segue-& ...

  7. Swift - 做一个简单的无线U盘(手机端Http服务器搭建)

    由于iOS系统的封闭性,在数据传输方面十分不方便.不像安卓设备,直接连接电脑就能当U盘使用.所以一般我们如果用iPhone临时存取个东西,要么使用数据线连接iTunes,要么手机电脑都登上QQ,使用Q ...

  8. 自己写的一个 java swing 的闹钟

    上一周新入职,把代码down下来之后,领导和我讲了一些大概的业务以及代码流程(领导是技术出身),领导让我自己先看看代码,然后我看了两天,觉得已经完全可以接任务了,但是领导却迟迟没有分配任务给我,虽然他 ...

  9. UWP-开发一个具有闹钟,天气预报,翻译,语音功能的Demo

    UWP即Windows 10中的Universal Windows Platform简称.即Windows通用应用平台,在Windows 10 Mobile/Surface(Windows平板电脑)/ ...

随机推荐

  1. WPF textblock加入超链接

    <TextBlock Grid.Row=" Margin="75,0,0,0"> <Hyperlink Name="BlogHl" ...

  2. vue实例属性(vm.$els)

    不需要表达式 参数: id(必需) 用法: 为 DOM 元素注册一个索引,方便通过所属实例的 $els 访问这个元素. 注意: 因为 HTML 不区分大小写,camelCase 名字比如 v-el:s ...

  3. 深入理解定位父级offsetParent及偏移大小

    前面的话 偏移量(offset dimension)是javascript中的一个重要的概念.涉及到偏移量的主要是offsetLeft.offsetTop.offsetHeight.offsetWid ...

  4. (第六天)DOM

    概念 文档对象模型(DOM)是表示和操作HTML和XML文档内容的基础API. 选取文档元素 (1)通过ID选取元素 var id = document.getElementById("se ...

  5. 用Canvas+Javascript FileAPI 实现一个跨平台的图片剪切、滤镜处理、上传下载工具

    直接上代码,其中上传功能需要自己配置允许跨域的文件服务器地址~ 或者将html文件贴到您的站点下同源上传也OK. 支持: 不同尺寸图片获取. 原图缩小放大. 原图移动. 选择框大小改变. 下载选中的区 ...

  6. 用javascript做一个视频播放器

    以前我们在网页上播放视频,都是要麻烦flash来实现.看着那一大段的<object>真心觉得累.随着html5的不断普及,现在是时候使用html5提供的video元素来做点正经事了,但是要 ...

  7. Puppet简易入门

    一.查看官方提供的下载源 https://docs.puppet.com/guides/puppetlabs_package_repositories.html 二. 选择对应系统的下载源 因为本机是 ...

  8. C# PPT 为形状设置三维效果

    在PPT中,形状是非常重要的元素.3-D形状,立体多元,给人耳目一新的感觉.在幻灯片中添加3-D效果形状,必然会为PPT的整体效果增色不少.为形状设置三维格式时,可设置棱台,轮廓线,表面效果等. 本篇 ...

  9. hibernate笔记--单向一对多映射方法

    上一篇讲的是单向多对一的表关系,与单向一对多的关系正好相反,如下图所示关系: ,可以看出年级表和学生表是一对多的关系,一条年级信息对应多条学生信息,在hibernate中成为单向的一对多的映射关系,应 ...

  10. Project Server 2010 配置详解

    应公司要求,需要加强对项目的管理.安排我学习一下微软的Project是如何进行项目管理的,并且在公司服务器上搭建出这样的一个项目管理工具.可以通过浏览器就可以访问.我因为用的单机是Project Pr ...