131 lines
5.3 KiB
Objective-C
131 lines
5.3 KiB
Objective-C
//
|
||
// QXLoginProtocolViewController.m
|
||
// QXLive
|
||
//
|
||
// Created by 启星 on 2025/5/30.
|
||
//
|
||
|
||
#import "QXLoginProtocolViewController.h"
|
||
#import <WebKit/WebKit.h>
|
||
|
||
static void *WKWebBrowserContext = &WKWebBrowserContext;
|
||
@interface QXLoginProtocolViewController ()<WKNavigationDelegate>
|
||
@property(nonatomic,strong)WKWebView *contentWebView;
|
||
@property(nonatomic,strong)UIProgressView *progressView;
|
||
@end
|
||
|
||
@implementation QXLoginProtocolViewController
|
||
|
||
- (void)viewDidLoad {
|
||
[super viewDidLoad];
|
||
// Do any additional setup after loading the view.
|
||
}
|
||
-(void)viewWillAppear:(BOOL)animated{
|
||
[super viewWillAppear:animated];
|
||
[self.navigationController setNavigationBarHidden:NO animated:YES];
|
||
}
|
||
|
||
-(void)setNavgationItems{
|
||
[super setNavgationItems];
|
||
NSString *title = @"";
|
||
if (self.type == 4) {
|
||
title = QXText(@"隐私政策");
|
||
}else if (self.type == 6) {
|
||
title = QXText(@"用户使用协议");
|
||
}
|
||
self.navigationItem.title = title;
|
||
}
|
||
- (void)initSubViews{
|
||
[self.view addSubview:self.contentWebView];
|
||
[self.view addSubview:self.progressView];
|
||
[self layoutConstraints];
|
||
NSString *server = QXGlobal.shareGlobal.currentServer;
|
||
NSURL* url=[NSURL URLWithString:[NSString stringWithFormat:@"%@%@?id=%ld",server,QXAppProtocol,self.type]];
|
||
NSURLRequest *request =[NSURLRequest requestWithURL:url];
|
||
[self.contentWebView loadRequest:request];
|
||
}
|
||
- (void)layoutConstraints {
|
||
[self.contentWebView setFrame:CGRectMake(0, NavContentHeight, SCREEN_WIDTH, SCREEN_HEIGHT-(NavContentHeight))];
|
||
[self.progressView setFrame:CGRectMake(0, NavContentHeight, SCREEN_WIDTH, 2)];
|
||
}
|
||
#pragma mark - WKNavigationDelegate
|
||
//开始加载
|
||
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{
|
||
//开始加载的时候,让加载进度条显示
|
||
self.progressView.hidden = NO;
|
||
}
|
||
|
||
|
||
//KVO监听进度条
|
||
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
|
||
|
||
if ([keyPath isEqualToString:NSStringFromSelector(@selector(estimatedProgress))] && object == self.contentWebView) {
|
||
[self.progressView setAlpha:1.0f];
|
||
BOOL animated = self.contentWebView.estimatedProgress > self.progressView.progress;
|
||
[self.progressView setProgress:self.contentWebView.estimatedProgress animated:animated];
|
||
|
||
// Once complete, fade out UIProgressView
|
||
if(self.contentWebView.estimatedProgress >= 1.0f) {
|
||
[UIView animateWithDuration:0.3f delay:0.3f 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];
|
||
}
|
||
}
|
||
|
||
#pragma mark - getters and setters
|
||
- (WKWebView *)contentWebView {
|
||
if (!_contentWebView) {
|
||
//设置网页的配置文件
|
||
WKWebViewConfiguration * configuration = [[WKWebViewConfiguration alloc]init];
|
||
// 允许可以与网页交互,选择视图
|
||
configuration.selectionGranularity = YES;
|
||
// web内容处理池pr
|
||
configuration.processPool = [[WKProcessPool alloc] init];
|
||
//自定义配置,一般用于 js调用oc方法(OC拦截URL中的数据做自定义操作)
|
||
WKUserContentController * UserContentController = [[WKUserContentController alloc]init];
|
||
// 是否支持记忆读取
|
||
configuration.suppressesIncrementalRendering = YES;
|
||
// 允许用户更改网页的设置
|
||
configuration.preferences.javaScriptEnabled = YES;
|
||
configuration.preferences.javaScriptCanOpenWindowsAutomatically = YES;
|
||
configuration.userContentController = UserContentController;
|
||
// 此处一定要做判断,因为是iOS9之后才有的方法,否则在iOS8下会崩溃
|
||
if ([[UIDevice currentDevice].systemVersion floatValue] >= 9.0) {
|
||
//允许视频播放
|
||
configuration.allowsAirPlayForMediaPlayback = YES;
|
||
// 允许在线播放
|
||
configuration.allowsInlineMediaPlayback = YES;
|
||
//开启手势触摸 默认设置就是NO。在ios8系统中会导致手势问题,程序崩溃
|
||
_contentWebView.allowsBackForwardNavigationGestures = YES;
|
||
}
|
||
_contentWebView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:configuration];
|
||
_contentWebView.backgroundColor = [UIColor whiteColor];
|
||
_contentWebView.opaque = YES;
|
||
//适应你设定的尺寸
|
||
[_contentWebView sizeToFit];
|
||
_contentWebView.scrollView.showsVerticalScrollIndicator = NO;
|
||
// 设置代理
|
||
_contentWebView.navigationDelegate = self;
|
||
//kvo 添加进度监控
|
||
[_contentWebView addObserver:self forKeyPath:NSStringFromSelector(@selector(estimatedProgress)) options:0 context:WKWebBrowserContext];
|
||
}
|
||
return _contentWebView;
|
||
}
|
||
|
||
- (UIProgressView *)progressView {
|
||
if (!_progressView) {
|
||
_progressView = [[UIProgressView alloc]initWithProgressViewStyle:UIProgressViewStyleDefault];
|
||
[_progressView setTrackTintColor:[UIColor colorWithRed:240.0/255 green:240.0/255 blue:240.0/255 alpha:1.0]];
|
||
_progressView.progressTintColor = QXConfig.themeColor;
|
||
}
|
||
return _progressView;
|
||
}
|
||
|
||
@end
|