KVO
2016-03-09 19:11
357 查看
KVO
KVO:key(键)Value(值)observe(观察者),有称键值观察者
通过对一个对象属性或者变量值的观察来做出对应的动作
只要key对应的值发生改变,就会告诉观察者,新旧值的改变
通过key来判断是哪一个KVO
1、有观察者、观察对象
添加观察者
给被观察的对象,添加一个观察者
[被观察的对象 addObserver:self forKeyPath:@“观察的属性” option:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
2、只要值发生改变就会去触发这个方法,告诉观察者值已经发生改变
只要观察者的值发生改变,就会去调用
KeyPath:观察的是哪一个属性
Object:用于传值
change:里面是一个字典包含发生改变的新值和旧值
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
3、****不在需要观察这个对象的时候,移除观察者,《只要不移除,就会崩溃》
[被观察的对象removeObserver:self forKeyPath:@"观察的属性"]
- (void)viewDidLoad
{
[superviewDidLoad];
scrollView = [[UIScrollViewalloc]initWithFrame:[UIScreenmainScreen].bounds];
scrollView.backgroundColor= [UIColorredColor];
scrollView.contentSize=
CGSizeMake(0,2000);
[self.viewaddSubview:scrollView];
//让self观察scrollView里面的contentOffset的值是否改变
[scrollViewaddObserver:selfforKeyPath:@"contentOffset"options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOldcontext:nil];
}
-(void)observeValueForKeyPath:(NSString*)keyPath
ofObject:(id)object change:(NSDictionary<NSString*,id>
*)change context:(void*)context{
NSLog(@"%@",keyPath);
NSLog(@"%@",change);
//找到最新的值
CGPoint changePoint = [change[@"new"]CGPointValue];
CGFloat y = changePoint.y+64;
NSLog(@"%f",1-y/100);
self.navigationController.navigationBar.alpha=
1-y/100;
}
- (void)dealloc{
[scrollViewremoveObserver:selfforKeyPath:@"contentOffset"];
}
KVO:key(键)Value(值)observe(观察者),有称键值观察者
通过对一个对象属性或者变量值的观察来做出对应的动作
只要key对应的值发生改变,就会告诉观察者,新旧值的改变
通过key来判断是哪一个KVO
1、有观察者、观察对象
添加观察者
给被观察的对象,添加一个观察者
[被观察的对象 addObserver:self forKeyPath:@“观察的属性” option:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
2、只要值发生改变就会去触发这个方法,告诉观察者值已经发生改变
只要观察者的值发生改变,就会去调用
KeyPath:观察的是哪一个属性
Object:用于传值
change:里面是一个字典包含发生改变的新值和旧值
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
3、****不在需要观察这个对象的时候,移除观察者,《只要不移除,就会崩溃》
[被观察的对象removeObserver:self forKeyPath:@"观察的属性"]
- (void)viewDidLoad
{
[superviewDidLoad];
scrollView = [[UIScrollViewalloc]initWithFrame:[UIScreenmainScreen].bounds];
scrollView.backgroundColor= [UIColorredColor];
scrollView.contentSize=
CGSizeMake(0,2000);
[self.viewaddSubview:scrollView];
//让self观察scrollView里面的contentOffset的值是否改变
[scrollViewaddObserver:selfforKeyPath:@"contentOffset"options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOldcontext:nil];
}
-(void)observeValueForKeyPath:(NSString*)keyPath
ofObject:(id)object change:(NSDictionary<NSString*,id>
*)change context:(void*)context{
NSLog(@"%@",keyPath);
NSLog(@"%@",change);
//找到最新的值
CGPoint changePoint = [change[@"new"]CGPointValue];
CGFloat y = changePoint.y+64;
NSLog(@"%f",1-y/100);
self.navigationController.navigationBar.alpha=
1-y/100;
}
- (void)dealloc{
[scrollViewremoveObserver:selfforKeyPath:@"contentOffset"];
}
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用中UISearchDisplayController搜索效果的用法
- IOS开发环境windows化攻略
- iOS应用中UITableView左滑自定义选项及批量删除的实现
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- iOS推送的那些事
- IOS 改变键盘颜色代码