• WKWebView进度及title


    WKWebView进度及title

    WKWebView进度及title

    WKWebView 的estimatedProgress和title 都是KVO模式,所以可以添加监控:

        [webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:NULL];

        [webView addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:NULL];

    •  

    监控的实现方法:

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

     

        if ([keyPath isEqualToString:@"estimatedProgress"]) {

     

            if (object == webView) {

                [self.progressView setAlpha:1.0f];

                [self.progressView setProgress:self.currentSubView.webView.estimatedProgress animated:YES];

     

                if(self.currentSubView.webView.estimatedProgress >= 1.0f) {

     

                    [UIView animateWithDuration:0.3 delay:0.3 options:UIViewAnimationOptionCurveEaseOut animations:^{

                        [self.progressView setAlpha:0.0f];

                    } completion:^(BOOL finished) {

                        [self.progressView setProgress:0.0f animated:NO];

                    }];

     

                }

            }

            else

            {

                [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];

            }

     

        }

        else if ([keyPath isEqualToString:@"title"])

        {

            if (object == self.webView) {

                self.title = self.webView.title;

     

            }

            else

            {

                [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];

     

            }

        }

        else {

     

            [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];

        }

    }

    •  

    这里的进度增加了动画,类似safari的进度效果

    需要注意的是销毁的时候一定要移除监控

            [webView removeObserver:self forKeyPath:@"estimatedProgress"];

            [webView removeObserver:self forKeyPath:@"title"];

     

    swift:

    // 监听

            theWebView?.addObserver(self, forKeyPath: "estimatedProgress", options: NSKeyValueObservingOptions.New, context: nil)

            theWebView?.addObserver(self, forKeyPath: "title", options: NSKeyValueObservingOptions.New, context: nil)

     

    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {

            if keyPath == "estimatedProgress" {

     

                if ((object?.isEqual(theWebView)) != false) {

                     self.progressView.alpha = 1.0

                    self.progressView.setProgress(Float((self.theWebView?.estimatedProgress)!), animated: true)

     

                    if self.theWebView?.estimatedProgress >= 1.0 {

     

                        UIView.animateWithDuration(0.3, delay: 0.3, options: .CurveEaseOut, animations: {

                            self.progressView.alpha = 0.0

                            }, completion: { (finished) in

                                self.progressView.setProgress(0.0, animated: false)

                        })

                    }

                }else {

                    super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context)

                }

            }

        }

        deinit {

            webView.removeObserver(self, forKeyPath: "estimatedProgress")

            webView.removeObserver(self, forKeyPath: "title")

        }

  • 相关阅读:
    JavaScript autoComplete 1.2
    Linux下安装配置git
    《SQL Server 2008从入门到精通》20180627
    《SQL必知必会》知识点汇总
    关于js的setTimeout和setInterval
    关于js的闭包
    web图片类型
    关于绑定事件
    js原型与继承
    关于js的mouseout
  • 原文地址:https://www.cnblogs.com/YangFuShun/p/5718872.html
Copyright © 2020-2023  润新知