之前项目需求要实现一个闹钟,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. vue实例属性(vm.$els)

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

  2. JSP生成Excel报表

    JSP实现报表下载 <%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib uri=" ...

  3. 创建第二个 local network - 每天5分钟玩转 OpenStack(84)

    GUI 中有两个地方可以创建 network: 1. Project -> Network -> Networks 这是普通用户在自己的 tenant 中创建 network 的地方. 2 ...

  4. Create Volume 操作(Part I) - 每天5分钟玩转 OpenStack(50)

    前面已经学习了 Cinder 的架构和相关组件,从本节我们开始详细分析 Cinder 的各种操作,首先讨论 Cinder 如何创建 volume. Create 操作流程如下: 客户(可以是 Open ...

  5. Android播放gif动画,增加屏幕掉金币效果

    前言:播放gif的版本有很多,我这边使用Android自带的Movie类播放gif动画,也是在别人的基础上进行修改.有同样需求的朋友可以参考我的demo. 1.效果图如下: 2.部分主要代码 Main ...

  6. Stop sucking,Become awesome.这一年我做到了么

    一年前,我因一些原因,工作变动,当时痛下决心,引用了<程序员的呐喊>封面的那句话: Just stop sucking and become awesome! 一年很快就过去了,最近看了不 ...

  7. Sublime Text3下的markdown插件的安装及配置

    Sublime Text3下的markdown插件的安装及配置 安装准备--安装Package Control 安装MarkdownEditing 安装Markdown Preview或OmniMar ...

  8. Tomcat服务器本地的搭建,以及在 IDEA软件下的配置,以及项目的测试运行(基于supermvc框架下的web)

    一.声明 使用了基于springmvc的supermvc的web框架.实习公司的框架. 二.tomact的下载与安装 1选择适合自己电脑配置的jdk和jre版本(截图来自tomcat的官方网站http ...

  9. 原创:WeZRender:微信小程序Canvas增强组件

    WeZRender是一个微信小程序Canvas增强组件,基于HTML5 Canvas类库ZRender. 使用 WXML: <canvas style="width: 375px; h ...

  10. Android之自定义ViewPager实现图片的无线轮播

    PS:以前也写过关于图片轮播这一块的博客.不过写的很烂,并且很多情况没有考虑到(没有支持无线轮播,和手势点击事件).因此这里写一篇补上.也是当时太年轻了. 注:图片请放大后再看.否则看不清楚. 学习内 ...