美文网首页
ios -KVO的简单使用小记

ios -KVO的简单使用小记

作者: 孤单雨凉 | 来源:发表于2017-08-21 15:22 被阅读36次

情景

     今天用到第三方的一个兼容webView与wkwebView的时候,对于IMYwebview中的属性estimatedProgress这个float值动态变化监听从而实现进度条加载的变化效果.

小介绍:

     键值观察协议时朝着自动化如上过程方向的一个很大进步。在很多情况下,广播者不需要做任何事情。

每个Cocoa对象自动处理用于发布任何对象的addObserver:forKeyPath:options:context:。如果广播者的 “setter”方法遵循某些规则,“setter”方法就会自动触发任何监听者的 observeValueForKeyPath:ofObject:change:context:方法。

例如如下代码就会在“source”对象上加入一个观察者::

[source      addObserver:destination      forKeyPath:@"myValue"     options:NSKeyValueChangeNewKey      context:nil];

这样在每次调用setMyValue:方法的时候都会发送一个observeValueForKeyPath:ofObject:change:context:消息到destination。

你所需要做的就是在被观察对象上注册监听者并让监听者实现observeValueForKeyPath:ofObject:change:context:。

优点: 内置的而且是自动的。可以观察任何键路径。支持依赖通知。

缺点: 广播者无法知道谁在监听。方法必须符合命名规则以实现自动观察消息的运作。监听者必须在被删除之前被移除,否者接下来的通知就会导致崩溃和失效-不过这对于该文中指出的所有方法都是一样的。

//实际运用

//1.为webContentView这个类添加观察者

[webContentView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:nil];

//2.添加观察者属性变化执行的方法(必须实现)这个方法是在观察的属性发生变化时便会触发

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void *)context{

if (webContentView.estimatedProgress == 0.0) {

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

progressView.progress = 0;

[UIView animateWithDuration:0.27 animations:^{

progressView.alpha = 1.0;

}];

}

if (webContentView.estimatedProgress == 1.0) {

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

[UIView animateWithDuration:0.27 delay:webContentView.estimatedProgress - progressView.progress options:0 animations:^{

progressView.alpha = 0.0;

} completion:nil];

}

[progressView setProgress:webContentView.estimatedProgress animated:NO];

}

//3.移除观察者(不移除的话很可能造成崩溃)

- (void)dealloc{

[webContentView removeObserver:self forKeyPath:@"estimatedProgress" context:nil];

}

总结:

相关文章

  • ios -KVO的简单使用小记

    情景 今天用到第三方的一个兼容webView与wkwebView的时候,对于IMYwebview中的属性esti...

  • iOS-KVO(二) 使用注意点

    iOS-KVO(一) 基本操作iOS-KVO(二) 使用注意点iOS-KVO(三) 窥探底层实现iOS-KVO(四...

  • iOS-KVO(三) 窥探底层实现

    iOS-KVO(一) 基本操作iOS-KVO(二) 使用注意点iOS-KVO(三) 窥探底层实现iOS-KVO(四...

  • iOS-KVO(四) 自定义KVO+Block

    iOS-KVO(一) 基本操作iOS-KVO(二) 使用注意点iOS-KVO(三) 窥探底层实现iOS-KVO(四...

  • iOS-KVO(一) 基本操作

    iOS-KVO(一) 基本操作iOS-KVO(二) 使用注意点iOS-KVO(三) 窥探底层实现iOS-KVO(四...

  • KVC

    iOS 如何使用KVC iOS开发UI篇—Kvc简单介绍 iOS开发系列--Objective-C之KVC、KVO

  • iOS KVO的简单使用

    KVO 什么是KVO呢?怎么使用呢?KVO(key-value-observing)是一种监听回调机制,某一个对象...

  • iOS-KVO

    一.kvo使用 kvo可以监听一个对象属性的变化,下面为简单使用. 二.使用runtime分析kvo 我写了个简单...

  • iOS KVC KVO的简单使用

    一、 kvc 1. KVC(Key-value coding)键值编码 通过对象的属性名(不管该属性是否暴露)直接...

  • iOS之KVO的简单使用

    demo地址:https://github.com/hanhuitao/KVO.git 概念 KVO,即:Key-...

网友评论

      本文标题:ios -KVO的简单使用小记

      本文链接:https://www.haomeiwen.com/subject/fsocdxtx.html