1. 基本介绍
- 继承自NSObject
- 管理通知的单例是NSNotificationCenter,通知的收取和发送都需要依靠它
2. 系统通知
2.1 系统通知--键盘通知
- 我们经常需要在键盘弹出或者隐藏的时候做一些特定的操作,因此需要监听键盘的状态
### 键盘状态改变的时候,系统会发出一些特定的通知
// 键盘即将显示
UIKeyboardWillShowNotification
// 键盘显示完毕
UIKeyboardDidShowNotification
// 键盘即将隐藏
UIKeyboardWillHideNotification
// 键盘隐藏完毕
UIKeyboardDidHideNotification
// 键盘的位置尺寸即将发生改变
UIKeyboardWillChangeFrameNotification
// 键盘的位置尺寸改变完毕
UIKeyboardDidChangeFrameNotification
### 系统发出键盘通知时,会附带一下跟键盘有关的额外信息(字典),字典常见的key如下:
// 键盘刚开始的frame
UIKeyboardFrameBeginUserInfoKey
// 键盘最终的frame(动画执行完毕后)
UIKeyboardFrameEndUserInfoKey
// 键盘动画的时间
UIKeyboardAnimationDurationUserInfoKey
// 键盘动画的执行节奏(快慢)
UIKeyboardAnimationCurveUserInfoKey
2.2 系统通知--设备通知
UIDevice
- UIDevice类提供了一个单粒对象,它代表着设备,通过它可以获得一些设备相关的信息,比如电池电量值(batteryLevel)、电池状态(batteryState)、设备的类型(model,比如iPod、iPhone等)、设备的系统(systemVersion)
通过
[UIDevice currentDevice]
可以获取这个单例对象UIDevice对象会不间断地发布一些通知,下列是UIDevice对象所发布通知的名称常量:
// 设备旋转
UIDeviceOrientationDidChangeNotification
// 电池状态改变
UIDeviceBatteryStateDidChangeNotification
// 电池电量改变
UIDeviceBatteryLevelDidChangeNotification
// 近距离传感器(比如设备贴近了使用者的脸部)
UIDeviceProximityStateDidChangeNotification
3. NSNotification的属性和方法
@interface NSNotification : NSObject <NSCopying, NSCoding>
@property (readonly, copy) NSString *name;//通知名称
@property (nullable, readonly, retain) id object;//通知对象
@property (nullable, readonly, copy) NSDictionary *userInfo;//通知信息
// 初始化通知
- (instancetype)initWithName:(NSString *)name object:(nullable id)object userInfo:(nullable NSDictionary *)userInfo NS_AVAILABLE(10_6, 4_0) NS_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER;
@end
@interface NSNotification (NSNotificationCreation)
// 通知创建
+ (instancetype)notificationWithName:(NSString *)aName object:(nullable id)anObject;
+ (instancetype)notificationWithName:(NSString *)aName object:(nullable id)anObject userInfo:(nullable NSDictionary *)aUserInfo;
// init方法不适用与通知初始化
- (instancetype)init /*NS_UNAVAILABLE*/;
@end