WebKit(进度条)

WebKit(展示Web界面)

WebKit(WKScriptMessageHandler)

WebKit(WKUIDelegate)

WebKit(WKNavigationDelegate)

WebKit(刷新)

WebKit(导航)

WebKit(浏览记录)

WebKit(进度条)


仿照qq或微信的进度条,我们也为我们的浏览器添加进度条功能。

1 WKWebView相关属性

在WKWebView就有一个关于网页加载进度的属性。

// 网络加载进度,0~1
@property (nonatomic, readonly) double estimatedProgress;

我们所要做的是使用KVO监听这个属性,然后显示到进度条上。

2 创建进度条

这里我们就是使用控件UIProgressView创建一个进度条,你还可以自行设计更精美的进度条。

2.1 强引用进度条

由于我们需要时刻更新进度条的数据,故我们使用强引用,设置进度条。

@property (nonatomic, strong) UIProgressView *progressView; ///< 进度条

2.2 懒加载进度条

我们使用懒加载的方式加载进度条。实现get方法。

- (UIProgressView *)progressView {
    if (_progressView == nil) {
        CGRect rect = CGRectZero;
        rect.origin.y = self.navigationController.navigationBar.frame.origin.y + self.navigationController.navigationBar.frame.size.height;
        rect.size.width = UIScreenWeight;
        rect.size.height = 2;
        _progressView = [[UIProgressView alloc] initWithFrame:rect];
        [_progressView setProgressViewStyle:UIProgressViewStyleDefault]; //设置进度条类型
        [self.view addSubview:_progressView];
    }
    return _progressView;
}

3 KVO实现进度条

3.1 KVO监听

在viewDidLoad()中,我们监听WKWebView的estimatedProgress属性。

- (void)viewDidLoad {
    [super viewDidLoad];
    [self initUIBarButtonItem];
    // 进度条监视
    NSLog(@"%f", self.webView.estimatedProgress); // 防止苹果改变属性名时,项目不报错。故这里先打印。
    [self.webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:nil];
    // 刷新界面
    NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"];
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
    [self.webView loadRequest:urlRequest]; // 加载页面
}

3.2 KVO回调实现

所有类的KVO回调都是实现- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context方法。

添加方法。

#pragma mark - KVO
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
    // 进度条
    if ([@"estimatedProgress" isEqualToString:keyPath]) {
        NSLog(@"%f", self.webView.estimatedProgress);
        [self.progressView setProgress:self.webView.estimatedProgress animated:YES];
        // 初始和终止状态
        if (self.progressView.progress == 0) {
            self.progressView.hidden = NO;
        } else if (self.progressView.progress == 1) {
            // 1秒后隐藏
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                // 再次判断,防止正在加载时隐藏
                if (self.progressView.progress == 1) {
                    self.progressView.progress = 0;
                    self.progressView.hidden = YES;
                }
            });
        }
    }
}

在这里我们分别判断了初始和终止状态,在终止状态我们会1秒后隐藏progressView;初始状态再显示。

到这里WebKit框架的讲解就完毕了,希望给你带来帮助。

 


其他

源代码

Objective-C

参考资料

WebKit Framework Reference

文档修改记录

时间描述
2015-12-02博文完成
2015-12-12更改链接

版权所有

CSDN:http://blog.csdn.net/y550918116j

GitHub:https://github.com/937447974/Blog

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTML5进度条的颜色可以通过CSS样式来定义和设置。在HTML5中,进度条是通过 <progress> 元素来实现的。可以使用CSS来自定义进度条的颜色和样式。 首先,可以使用CSS的伪类选择器来设置进度条的颜色。通过伪类选择器 ::-webkit-progress-value 和 ::-moz-progress-bar,可以设置进度条不同部分的颜色。具体可以使用 background-color 属性来设置进度条的颜色。 其次,可以使用 CSS 的 ::-moz-progress-bar 和 ::-webkit-progress-bar 伪元素选择器来设置整个进度条的背景颜色。这两个属性可以分别设置在 Firefox 和 Webkit 浏览器中进度条的颜色。 以下是一个示例代码,演示了如何使用CSS来设置HTML5进度条的颜色: ```html <!DOCTYPE html> <html> <head> <style> /* 设置进度条整体样式 */ ::-moz-progress-bar { background-color: blue; /* Firefox */ } ::-webkit-progress-bar { background-color: blue; /* Webkit浏览器 */ } /* 设置进度条的已完成部分的样式 */ ::-webkit-progress-value { background-color: green; /* Webkit浏览器 */ } ::-moz-progress-value { background-color: green; /* Firefox */ } </style> </head> <body> <!-- 使用 <progress> 元素创建进度条 --> <progress value="80" max="100"></progress> </body> </html> ``` 在上述代码中,<progress> 元素创建了一个进度条,并设置了初始值(value)为80,最大值(max)为100。通过CSS样式设置进度条的整体颜色和已完成部分的颜色。 这样,就可以根据需要自定义HTML5进度条的颜色了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值