KVO

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"];
  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值