您的位置:首页 > 移动开发 > IOS开发

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"];

  

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  KVC KVO ios