# Alarm_Clock_UserNotifications
# 仿ios系统闹钟
* 添加闹钟效果图
![](https://github.com/SunriseOYR/Alarm_Clock_UserNotifications/blob/master/gif/001.gif?raw=true)
* 收到通知效果图
![](https://github.com/SunriseOYR/Alarm_Clock_UserNotifications/blob/master/gif/002.gif?raw=true)
**更新日志**
2018.09.12 由于iOS系统限制了注册本地推送的数量,最大的注册量为64条,且一旦超出64条,所有的推送都将失效,故而在添加推送的时候做了一个判断,超过64条后,将不添加,以免影响已经添加的推送。
# 前言
最近项目中涉及到了本地通知的功能,索性就模仿系统闹钟写了个demo,对于iOS系统闹钟,应该都比较熟悉,该demo,基本实现了系统闹钟的全部功能。该demo本地通知使用的是iOS10 推出的UserNotifications, 关于UserNotifications的介绍和使用,网上已有诸多文章,在此就不多做赘述。
# UNNotificationsManager
关于闹钟所使用到的UserNotifications库 做了一个简单的封装, 包含了注册通知,添加通知,以及 一些通知组件的 实现方法,同时提供了可供 外部使用的收到推送的通知
extern NSString * const UNDidReciveRemoteNotifationKey;//收到远程通知时调用
extern NSString * const UNDidReciveLocalNotifationKey; //收到本地通知时
extern NSString * const UNNotifationInfoIdentiferKey; //本地通知userinfo 里 Identifer的key值
一些其他方法,以demo为准
//注册本地通知
+ (void)registerLocalNotification;
#pragma mark -- AddNotification
/* 添加通知
* identifer 标识符
* body 主体
* title 标题
* subTitle 子标题
* weekDay 周几
* date 日期
* repeat 是否重复
* music 音乐
*/
+ (void)addNotificationWithBody:(NSString *)body
title:(NSString *)title
subTitle:(NSString *)subTitle
weekDay:(NSInteger)weekDay
date:(NSDate *)date
music:(NSString *)music
identifer:(NSString *)identifer
isRepeat:(BOOL)repeat
completionHanler:(void (^)(NSError *))handler;
#pragma mark -- NotificationManage
/*
* identifer 标识符
* 根据标识符 移除 本地通知
*/
+ (void)removeNotificationWithIdentifer:(NSString *)identifer;
#pragma mark -- NSDateComponents
/*
* return 日期组件 时分秒
* ex 每天重复
*/
+ (NSDateComponents *)componentsEveryDayWithDate:(NSDate *)date;
#pragma mark -- UNNotificationContent
/* UNMutableNotificationContent 通知内容
* title 标题
* subTitle 子标题
* body 主体
*/
+ (UNMutableNotificationContent *)contentWithTitle:(NSString *)title
subTitle:(NSString *)subTitle
body:(NSString *)body;
#pragma mark -- UNNotificationTrigger
/* UNNotificationTrigger 通知触发器
* interval 通知间隔
* repeats 是否重复
*/
+ (UNNotificationTrigger *)triggerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL)repeats;
# 添加闹钟
> 普通闹钟
![](https://github.com/SunriseOYR/Alarm_Clock_UserNotifications/blob/master/gif/004.jpeg?raw=true)
[UNNotificationsManager addNotificationWithContent:[UNNotificationsManager contentWithTitle:@"时钟" subTitle:nil body:nil sound:[UNNotificationSound soundNamed:self.music]] dateComponents:[UNNotificationsManager componentsWithDate:self.date] identifer:self.identifer isRepeat:self.repeats completionHanler:^(NSError *error) {
NSLog(@"add error %@", error);
}];
> 每天重复
![](https://github.com/SunriseOYR/Alarm_Clock_UserNotifications/blob/master/gif/005.jpeg?raw=true)
```
[UNNotificationsManager addNotificationWithContent:[UNNotificationsManager contentWithTitle:@"时钟" subTitle:nil body:nil sound:[UNNotificationSound soundNamed:self.music]] dateComponents:[UNNotificationsManager componentsEveryDayWithDate:self.date] identifer:self.identifer isRepeat:self.repeats completionHanler:^(NSError *error) {
NSLog(@"add error %@", error);
}];
```
> 每周重复(周一,周二等)
[self.repeatStrs enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSInteger week = 0;
if ([obj containsString:@"周日"]) {
week = 1;
}else if([obj containsString:@"周一"]){
week = 2;
}else if([obj containsString:@"周二"]){
week = 3;
}else if([obj containsString:@"周三"]){
week = 4;
}else if([obj containsString:@"周四"]){
week = 5;
}else if([obj containsString:@"周五"]){
week = 6;
}else if([obj containsString:@"周六"]){
week = 7;
}
[UNNotificationsManager addNotificationWithContent:[UNNotificationsManager contentWithTitle:@"闹钟" subTitle:nil body:nil sound:[UNNotificationSound soundNamed:self.music]] weekDay:week date:self.date identifer:self.identifer isRepeat:YES completionHanler:^(NSError *error) {
NSLog(@"add error %@", error);
}];
}];
}
# 铃声
这里无法获取系统铃声和震动类型,自己在网上找了点[铃声素材](http://www.zedge.net/ringtones/0-1-3-ios)。 系统铃声需要caf格式,MP3和caf 格式相互转化方法如下
//控制台输入
afconvert xxx.mp3 xxx.caf -d ima4 -f caff -v
![](https://github.com/SunriseOYR/Alarm_Clock_UserNotifications/blob/master/gif/006.jpeg?raw=true)
# 通知栏选项
![](https://github.com/SunriseOYR/Alarm_Clock_UserNotifications/blob/master/gif/007.png?raw=true)
![](https://github.com/SunriseOYR/Alarm_Clock_UserNotifications/blob/master/gif/010.png?raw=true)
> 首先注册通知的时候需要UNNotificationCategory 以及UNNotificationAction
UNNotificationAction *action1 = [UNNotificationAction actionWithIdentifier:actionFiveMin title:@"5分钟后" options:UNNotificationActionOptionNone];
UNNotificationAction *action2 = [UNNotificationAction actionWithIdentifier:actionHalfAnHour title:@"半小时后" options:UNNotificationActionOptionNone];
UNNotificationAction *action3 = [UNNotificationAction actionWithIdentifier:actionOneHour title:@"1小时后" options:UNNotificationActionOptionNone];
UNNotificationAction *action4 = [UNNotificationAction actionWithIdentifier:actionStop title:@"停止" options:UNNotificationActionOptionNone];
UNNotificationCategory *category = [UNNotificationCategory categoryWithIdentifier:identiferStr actions:@[action1, action2,action3, action4] intentIdentifiers:@[] options:UNNotificationCategoryOptionNone];
UNNotificationCategory *stopCategory = [UNNotificationCategory categoryWithIdentifier:categryStopIdf actions:@[action4] intentIdentifiers:@[] options:UNNotificationCategoryOptionNone];
[center setNotificationCategories:[NSSet setWithArray:@[category,stopCategory]]];
> 然后在设置UNMutableNotificationContent的时候需要设置对应的categoryIdentifier 这里区分了是否设置了稍候提醒
![](https://github.com/SunriseOYR/Alarm_Clock_UserNotifications/blob/master/gif/009.png?raw=true)
+ (void)addNotificationWithContent:(UNNotificationContent *)content identifer:(NSString *)identifer trigger:(UNNotificationTrigger *)trigger completionHanler:(void (^)(NSError *))handler {
//设置 category
UNMutableNotificationContent *aContent = [content mutableCopy];
if ([iden
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备、移动设备等 操作系统:LInux、IOS、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络与通信是一个非常广泛的领域,它涉及到计算机科学、电子工程、数学等多个学科的知识。 云计算与大数据:数据集、包括云计算平台、大数据分析、人工智能、机器学习等,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。
资源推荐
资源详情
资源评论
收起资源包目录
高仿iOS系统闹钟 UserNotifications.zip (99个子文件)
cm
gif
009.png 22KB
004.jpeg 24KB
003.jpeg 27KB
010.png 40KB
008.png 10KB
001.gif 218KB
007.png 55KB
005.jpeg 18KB
002.gif 170KB
006.jpeg 20KB
.DS_Store 8KB
Alarm_Clock_UserNotificationsUITests
Alarm_Clock_UserNotificationsUITests.m 1KB
Info.plist 680B
Alarm_Clock_UserNotifications.xcodeproj
project.pbxproj 45KB
xcuserdata
OrangesAL.xcuserdatad
xcschemes
xcschememanagement.plist 352B
ouyangrong.xcuserdatad
xcdebugger
Breakpoints_v2.xcbkptlist 473B
xcschemes
Alarm_Clock_UserNotifications.xcscheme 4KB
xcschememanagement.plist 681B
sunrise.xcuserdatad
xcdebugger
Breakpoints_v2.xcbkptlist 91B
xcschemes
Alarm_Clock_UserNotifications.xcscheme 4KB
xcschememanagement.plist 681B
project.xcworkspace
xcshareddata
IDEWorkspaceChecks.plist 238B
contents.xcworkspacedata 174B
xcuserdata
OrangesAL.xcuserdatad
UserInterfaceState.xcuserstate 13KB
ouyangrong.xcuserdatad
UserInterfaceState.xcuserstate 58KB
sunrise.xcuserdatad
UserInterfaceState.xcuserstate 70KB
Alarm_Clock_UserNotifications
.DS_Store 8KB
HomeViewController.h 243B
Base.lproj
Main.storyboard 64KB
LaunchScreen.storyboard 2KB
AppDelegate.h 301B
resource
lightM_02.caf 1.3MB
hotM_01.caf 1.3MB
lightM_04.caf 1.3MB
hotM_02.caf 744KB
lightM_03.caf 1.05MB
lightM_01.caf 1.3MB
AppDelegate.m 2KB
main.m 358B
Lib
YYCache
YYKVStorage.m 38KB
YYDiskCache.h 15KB
YYMemoryCache.m 15KB
YYKVStorage.h 11KB
YYCache.h 7KB
YYMemoryCache.h 7KB
YYCache.m 4KB
YYDiskCache.m 13KB
YYModel
NSObject+YYModel.m 83KB
YYClassInfo.m 13KB
YYModel.h 595B
YYClassInfo.h 8KB
NSObject+YYModel.h 13KB
IBProperty
UICollectionViewFlowLayout+ORIBProperty.h 698B
UIButton+ORIBProperty.m 855B
UIButton+ORIBProperty.h 624B
UICollectionViewFlowLayout+ORIBProperty.m 2KB
UIImageView+ORIBProperty.m 3KB
NSLayoutConstraint+ORIBProperty.m 1KB
UITextView+ORIBProperty.m 3KB
UILabel+ORIBProperty.h 642B
UITextField+ORIBProperty.h 389B
UIControl+ORIBProperty.m 755B
ORIBProperty.h 1015B
NSLayoutConstraint+ORIBProperty.h 715B
UIView+ORIBProperty.h 1KB
UITextField+ORIBProperty.m 451B
UIControl+ORIBProperty.h 400B
UILabel+ORIBProperty.m 2KB
UIImageView+ORIBProperty.h 477B
UIView+ORIBProperty.m 6KB
NSObject+ORIBProperty.m 923B
NSObject+ORIBProperty.h 416B
UITextView+ORIBProperty.h 536B
Aspects
Aspects.h 4KB
Aspects.m 38KB
public
.DS_Store 8KB
UNNotificationsManager
.DS_Store 6KB
UNNotificationsManager.m 18KB
UNNotificationsManager.h 9KB
View
AlarmClockCell.h 906B
AlarmClockCell.m 1KB
Controller
BaseTableViewController.m 990B
LabelViewController.m 728B
AddClockViewController.h 395B
RepeatViewController.h 269B
ClockViewModel.m 8KB
AddClockViewController.m 3KB
RepeatViewController.m 3KB
MusicViewController.h 267B
BaseTableViewController.h 376B
MusicViewController.m 3KB
LabelViewController.h 267B
ClockViewModel.h 2KB
Info.plist 2KB
HomeViewController.m 4KB
Assets.xcassets
AppIcon.appiconset
Contents.json 1KB
Alarm_Clock_UserNotificationsTests
Alarm_Clock_UserNotificationsTests.m 989B
Info.plist 680B
README.md 10KB
共 99 条
- 1
资源评论
妄北y
- 粉丝: 1w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功