文章分享至我的个人技术博客: https://cainluo.github.io/14974988224036.html
Notification Content Extensions
在之前我们就讲过苹果爸爸在iOS 10
推出了一个新的UserNotification
框架, 但苹果爸爸的野心不小, 不单单推出框架那么简单, 而且连Extension
都给你搞了一个, 哼哼, 我看还有谁~
这里所演示的项目是和之前一样的, 如果找不到的盆友可以到这里去看看.
添加Notification Extension
回到我们的项目, 拷贝一份新的, 然后添加Notification Extension
:
配置Notification Extension Info
添加完Extension
之后, 我们需要来配置一下Info.plist
文件, 这里我们要添加点东西:
- UNNotificationExtensionDefaultContentHidden
- 设置成为YES
- UNNotificationExtensionCategory
- 和我们之前项目的
AppDelegate.m
文件所添加的Category
保持一致, 我这里是reminder
- UNNotificationExtensionInitialContentSizeRatio
- 这个东东我改为0.5
修改完成后的结果:
来通知的效果:
自定义一个小方法
上面的东西都搞定了之后, 那么接下来就是要自定义一个小方法:
- (void)addShakeAnimation {
CAKeyframeAnimation *frameAnimation = [CAKeyframeAnimation animation];
frameAnimation.keyPath = @"transform.translation.x";
frameAnimation.duration = 1;
frameAnimation.repeatCount = MAXFLOAT;
frameAnimation.values = @[@-20.0, @20.0, @-20.0, @20.0, @-10.0, @10.0, @-5.0, @5.0, @0.0];
frameAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
[self.view.layer addAnimation:frameAnimation
forKey:@"shake"];
}
- (void)removeShakeAnimation {
[self.view.layer removeAnimationForKey:@"shake"];
}
复制代码
-
addShakeAnimation添加摇摆动画的方法
-
removeShakeAnimation删除摇摆动画的方法
效果:
- didReceiveNotificationResponse:completionHandler:方法
在Notification Extension
里, 有这么一个方法叫做: - didReceiveNotificationResponse:completionHandler:
, 这个方法可以获取通知里的Action
事件, 我这里是这么写的:
- (void)didReceiveNotificationResponse:(UNNotificationResponse *)response
completionHandler:(void (^)(UNNotificationContentExtensionResponseOption))completion {
if ([response.actionIdentifier isEqualToString:@"cancel"]) {
UNNotificationRequest *request = response.notification.request;
NSArray *identifiers = @[request.identifier];
// 根据标识符删除等待通知
[[UNUserNotificationCenter currentNotificationCenter] removePendingNotificationRequestsWithIdentifiers:identifiers];
// 根据标识符删除发送通知
[[UNUserNotificationCenter currentNotificationCenter] removeDeliveredNotificationsWithIdentifiers:identifiers];
self.label.text = @"点击了取消按钮";
// 删除动画效果
[self removeShakeAnimation];
// 不隐藏通知页面
completion(UNNotificationContentExtensionResponseOptionDoNotDismiss);
} else {
// 隐藏通知页面
completion(UNNotificationContentExtensionResponseOptionDismiss);
}
}
复制代码
如果不懂这个动画应用的话, 我在度娘里看到了一篇文章, 可以来看看IOS 核心动画之CAKeyframeAnimation
整体的运行效果:
总结
文章里只是简单的讲解, 如果还想了解更多的话, 可以自行去查看WWDC 2016的视频讲解.
工程地址
项目地址: https://github.com/CainRun/iOS-10-Characteristic/tree/master/6.Notification%20Content%20Extension
所有评论(0)