use*_*034 22 uiwebview uiprogressview ios
嗨,我是编程的新手,我正在尝试在Xcode上制作我的第一个iPhone应用程序.我的应用程序包含一个按钮,可在按下时打开UIWebView并加载主页.现在我还想在Safari也使用的WebView中添加一个Progress View,它表示加载页面的进度.我怎样才能做到这一点?
到目前为止,我的代码用于在UIWebView中加载URL:
.H
IBOutlet UIWebView *webView;
Run Code Online (Sandbox Code Playgroud)
.M
- (void)viewDidLoad
{
[webView loadRequest:[NSURLRequest requestWithURL: [NSURL URLWithString:@"http:/www.google.com/"]]];
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
Wol*_*ink 71
要准确UIProgressView,您需要执行以下任务:
现在当你装载你的时候,那是UIWebView不可能的.苹果公司也没有做到这一点.苹果经常使用假的UIProgressViews在页面加载时给你一些东西.Mail还使用虚假进度视图.去试试吧.这就是Apple的假进度视图的工作原理:
要实现此目的,您必须手动设置progressView的动画.你可以将它子类化,但这对你来说可能有点先进.最简单的方法是:
在myViewController.h中
@interface myViewController : UIViewController {
BOOL theBool;
//IBOutlet means you can place the progressView in Interface Builder and connect it to your code
IBOutlet UIProgressView* myProgressView;
NSTimer *myTimer;
}
@end
Run Code Online (Sandbox Code Playgroud)
在myViewController.m中
#import "myViewController.h"
@implementation myViewController
- (void)webViewDidStartLoad:(UIWebView *)webView{
myProgressView.progress = 0;
theBool = false;
//0.01667 is roughly 1/60, so it will update at 60 FPS
myTimer = [NSTimer scheduledTimerWithTimeInterval:0.01667 target:self selector:@selector(timerCallback) userInfo:nil repeats:YES];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView{
theBool = true;
}
-(void)timerCallback {
if (theBool) {
if (myProgressView.progress >= 1) {
myProgressView.hidden = true;
[myTimer invalidate];
}
else {
myProgressView.progress += 0.1;
}
}
else {
myProgressView.progress += 0.05;
if (myProgressView.progress >= 0.95) {
myProgressView.progress = 0.95;
}
}
}
@end
Run Code Online (Sandbox Code Playgroud)
然后,在您的任务完成的位置,设置theBool = true;并且进度视图将自行处理.更改if语句中的值以控制动画的速度.
Swift 2.2
class ViewController: UIViewController,UIWebViewDelegate {
@IBOutlet weak var webView: UIWebView!
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!
@IBOutlet weak var myProgressView: UIProgressView!
var myTimer = NSTimer()
var theBool = Bool()
override func viewDidLoad() {
super.viewDidLoad()
let url = NSURL(string: "https://www.youtube.com")
let request = NSURLRequest(URL: url!)
activityIndicator.hidesWhenStopped = true
activityIndicator.startAnimating()
webView.loadRequest(request)
}
func timerCallback(){
if theBool {
if myProgressView.progress >= 1 {
myProgressView.hidden = true
myTimer.invalidate()
}else{
myProgressView.progress += 0.1
}
}else{
myProgressView.progress += 0.05
if myProgressView.progress >= 0.95 {
myProgressView.progress = 0.95
}
}
}
func webViewDidStartLoad(webView: UIWebView) {
activityIndicator.startAnimating()
myProgressView.progress = 0
theBool = false
myTimer = NSTimer.scheduledTimerWithTimeInterval(0.01667,target: self,selector: #selector(ViewController.timerCallback),userInfo: nil,repeats: true)
}
func webViewDidFinishLoad(webView: UIWebView) {
activityIndicator.stopAnimating()
theBool = true
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33934 次 |
| 最近记录: |