WebKit 加载 时 加入动画
2015-10-05 18:08
363 查看
由于UIWebView 确实是有些年头了 并且 很是吃资源,所有 苹果公司在iOS 8.0推出了WebKit框架,
在WebKit框架中,使用WKWebView来代替IOS的UIWebView和OSX的WebView,而且提供了在两个平台可以一致使用的接口。
WebKit框架使得开发者可以在原生App中使用Nitro来提高网页的性能和表现,Nitro就是Safari的JavaScript引擎。
今天用到了WebKit,就想着加载的时候来个饼状图啥的。
首先看看两者的异同吧
第一、WKWebView增加的属性和方法
类比UIWebView,跟UIWebView的API对比,
增加的属性:
1、estimatedProgress 加载进度条,在IOS8之前我们是通过一个假的进度条来实现
2、backForwardList 表示historyList
3、WKWebViewConfiguration *configuration; 初始化webview的配置
增加的方法:
1、- (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration
初始化
3、(WKNavigation *)goToBackForwardListItem:(WKBackForwardListItem *)item;
跳到历史的某个页面
第二、相同的属性和方法
goBack、goForward、canGoBack、canGoForward、stopLoading、loadRequest、scrollView
第三、被删去的属性和方法:
1、- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
在跟js交互时,我们使用这个API,目前WKWebView完档没有给出实现类似功能的API
2、无法设置缓存
在UIWebView,使用NSURLCache缓存,通过setSharedURLCache可以设置成我们自己的缓存,但WKWebView不支持NSURLCache
第四、delegate方法的不同
UIWebView支持的代理是UIWebViewDelegate,WKWebView支持的代理是WKNavigationDelegate和WKUIDelegate
WKNavigationDelegate主要实现了涉及到导航跳转方面的回调方法
WKUIDelegate主要实现了涉及到界面显示的回调方法:如WKWebView的改变和js相关内容
具体来说WKNavigationDelegate除了有开始加载、加载成功、加载失败的API外,还具有额外的三个代理方法:
1、- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation
这个代理是服务器redirect时调用
2、- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler
这个代理方法表示当客户端收到服务器的响应头,根据response相关信息,可以决定这次跳转是否可以继续进行。
3.- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
根据webView、navigationAction相关信息决定这次跳转是否可以继续进行,这些信息包含HTTP发送请求,如头部包含User-Agent,Accept
我看了看 好像就这么多不同,
然后开始我们的加载进度条,
加载进度条和饼状图,在上边说了 以前我们都是用的假的,但是WebKit 给我们带来了全新的属性,总算可以做真正的净土条了。
那就是
estimatedProgress属性,我们通过KVO 可以直接得到进度
以下 是代码 。我用的第三方库是JGProgressHUD 挺 不错的。
我做了截图,吧这部分代码,截取下来 大家看看。
在WebKit框架中,使用WKWebView来代替IOS的UIWebView和OSX的WebView,而且提供了在两个平台可以一致使用的接口。
WebKit框架使得开发者可以在原生App中使用Nitro来提高网页的性能和表现,Nitro就是Safari的JavaScript引擎。
今天用到了WebKit,就想着加载的时候来个饼状图啥的。
首先看看两者的异同吧
第一、WKWebView增加的属性和方法
类比UIWebView,跟UIWebView的API对比,
增加的属性:
1、estimatedProgress 加载进度条,在IOS8之前我们是通过一个假的进度条来实现
2、backForwardList 表示historyList
3、WKWebViewConfiguration *configuration; 初始化webview的配置
增加的方法:
1、- (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration
初始化
3、(WKNavigation *)goToBackForwardListItem:(WKBackForwardListItem *)item;
跳到历史的某个页面
第二、相同的属性和方法
goBack、goForward、canGoBack、canGoForward、stopLoading、loadRequest、scrollView
第三、被删去的属性和方法:
1、- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
在跟js交互时,我们使用这个API,目前WKWebView完档没有给出实现类似功能的API
2、无法设置缓存
在UIWebView,使用NSURLCache缓存,通过setSharedURLCache可以设置成我们自己的缓存,但WKWebView不支持NSURLCache
第四、delegate方法的不同
UIWebView支持的代理是UIWebViewDelegate,WKWebView支持的代理是WKNavigationDelegate和WKUIDelegate
WKNavigationDelegate主要实现了涉及到导航跳转方面的回调方法
WKUIDelegate主要实现了涉及到界面显示的回调方法:如WKWebView的改变和js相关内容
具体来说WKNavigationDelegate除了有开始加载、加载成功、加载失败的API外,还具有额外的三个代理方法:
1、- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation
这个代理是服务器redirect时调用
2、- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler
这个代理方法表示当客户端收到服务器的响应头,根据response相关信息,可以决定这次跳转是否可以继续进行。
3.- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
根据webView、navigationAction相关信息决定这次跳转是否可以继续进行,这些信息包含HTTP发送请求,如头部包含User-Agent,Accept
我看了看 好像就这么多不同,
然后开始我们的加载进度条,
加载进度条和饼状图,在上边说了 以前我们都是用的假的,但是WebKit 给我们带来了全新的属性,总算可以做真正的净土条了。
那就是
estimatedProgress属性,我们通过KVO 可以直接得到进度
以下 是代码 。我用的第三方库是JGProgressHUD 挺 不错的。
我做了截图,吧这部分代码,截取下来 大家看看。
相关文章推荐
- 读书笔记jvm探秘之二: 对象创建
- SQL server 数据库中的数据操作
- Codeforces Round #323 (Div. 1) B. Once Again... 最长非严格递增子序列
- Keepalived原理与实战精讲
- 【ETL】拉链表算法
- 对象——基本概念
- 比较幸运的收到了两份offer
- 国际版路由器
- Kafka命令
- 【总结】Java基础总结⑺
- 构建高性能WEB之HTTP首部优化
- 回顾spring(云计算项目)
- unity官方demo学习之Stealth(二十二)敌人动画控制
- 【总结】Java基础总结⑹
- acdream 1211 Reactor Cooling 【边界网络流量 + 输出流量】
- [Python进阶-2]模块和包的复习,以及第三方模块的安装
- Bridge(桥接)设计模式
- 编程语言汉英翻译
- Kafka集群文档
- leetcode题目 旋转排序数列的查找