1.完成網頁跳轉袒炉,我們很容易想到利用UIWebView和Safari來實現(xiàn)。其中:
- safari自帶的功能交多樊零,前進后退我磁,刷新,進度條驻襟,網址等夺艰。但是需要跳轉 APP,必須打開系統(tǒng)自帶的safari程序來打開網頁沉衣,這樣會增大內存消耗郁副。
- webView雖然可以不用打開新的程序來實現(xiàn)跳轉網頁的功能,但其不能真實實現(xiàn)進度條功能豌习,只能通過假數(shù)據模擬存谎。
2. IOS 8.0開始,蘋果提供了WKWebview ——webView的升級版肥隆,可以實現(xiàn)真實的進度條功能既荚。
加載中.png
加載完成.png
WKWebview 實現(xiàn)真實進度條步驟:
- 1.通過拖控件或者代碼的方式添加一個UIProgressView,用于顯示加載進度栋艳。
- 2.創(chuàng)建網路請求對象恰聘,利用UIProgressView對象加載該請求
/創(chuàng)建網絡請求對象
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:self.url]];
//加載請求對象
[webView loadRequest:request];
- 3.監(jiān)聽progress的變化
[webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:nil];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
self.mineProgressView.progress = [change[@"new"]floatValue];
//加載完成移除進度條
self.mineProgressView.hidden = self.mineProgressView.progress >= 1;
}
- 4.移除觀察者
//移除觀察者
- (void)dealloc {
[self.webView removeObserver:self forKeyPath:@"estimatedProgress"];
}
3.SFSafariViewController (iOS 9.0)
- 不再需要跳轉APP
- 跳轉控制器用present,此時效果為modal,因為系統(tǒng)底層給modal的方式做了封裝吸占。
- present方式:導航條和tabBar是safari樣式的
SFSafariViewController * safari = [[SFSafariViewController alloc]initWithURL:[NSURL URLWithString:detailPath]];
[self presentViewController:safari animated:YES completion:nil];
present方式.png
- push 方式:導航條和tabBar是就是普通push出來的樣式
push方式.png
新View出現(xiàn)的方式都是push樣式晴叨,但是導航條和TabBar不一樣,這就說明了present方式彈出控制器是系統(tǒng)在push的方式上做了進一步封裝矾屯。