2016-07-10 10 views
0

Ich lade eine Web-Ansicht in meine iOS App.iOS Swift Webview zeige Bild beim Laden

Ist es möglich, ein Bild anzuzeigen, während das Webview im Hintergrund geladen wird?

Ich fand etwas für Objective-C aber nichts für Swift 2.2.

Wie kann ich erkennen, ob die Web-Ansicht fertig geladen wurde?

Edit:

func webViewDidStartLoad(webView: UIWebView!) { 
    loadingView.viewWithTag(1)?.hidden = false 
    print("Webview started Loading") 
    } 

func webViewDidFinishLoad(webView: UIWebView!) { 
loadingView.viewWithTag(1)?.hidden = true 
print("Webview did finish load") 
} 

aus: How to show image while page is loading in swift?

+0

einen Code geben, haben Sie versucht, – nmnsud

+0

meinen Beitrag bearbeitet. Was ich nicht verstehe, ist, wo das Bild im Storyboard platziert werden soll. Ich meine, ich kann es nicht über das Webview platzieren ?! – simplesystems

+0

Überprüfen Sie meine Bearbeitung @ Simplesystems –

Antwort

1

So endlich seine Arbeits ...

Hier ist meine Lösung für Swift 2,2

class YourViewController: UIViewController, UIWebViewDelegate { 

    @IBOutlet weak var webView: UIWebView! 

    override func viewDidLoad() { 

    super.viewDidLoad() 

    // For the Loading image: Create an ImageView programmatically and add id to the view 
     let imageName = "YourPicture.png" 
     let image = UIImage(named: imageName) 
     let imageView = UIImageView(image: image!) 
     imageView.tag = 1; 
     imageView.frame = CGRect(x: 50, y: 250, width: 300, height: 100) 
     view.addSubview(imageView) 


     let url = "http://apple.com" 

     let requestURL = NSURL(string:url) 
     let request = NSURLRequest(URL: requestURL!) 
     webView.delegate = self 
     webView.loadRequest(request)   

    } 

    func webViewDidFinishLoad(webView: UIWebView) { 

     // UIWebView object has fully loaded. 
     if(webView.stringByEvaluatingJavaScriptFromString("document.readyState") == "complete") { 

     // Manually add a delay, showing the Webview takes some time.. 
     // For Swift 2.2 
     let time = dispatch_time(dispatch_time_t(DISPATCH_TIME_NOW), 2 * Int64(NSEC_PER_SEC)) 

     dispatch_after(time, dispatch_get_main_queue()) { 
     //put your code which should be executed with a delay here 

      self.view.viewWithTag(1)?.hidden = true} 
     } 

     print("Webview did finish load") 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

} 
1

zum UIWebViewDelegate Protokoll Conform und Ihren View-Controller als Delegierter der Web-Ansicht eingestellt. Die Funktion webViewDidFinishLoad (_ webView: UIWebView) wird aufgerufen, wenn das Laden beendet ist. Sie können Ihr Bild am Anfang über die Webansicht setzen und dann in dieser Funktion löschen.

Edit:

Ich kann es nicht über die Web-Ansicht platzieren kann ich?

Ja, genau das tun. Wenn Sie das Bild auf "Versteckt" setzen, wirkt sich dies nicht auf die Interaktion des Benutzers mit der Webansicht aus.

+0

ich kann nicht, wenn ich eine Bildansicht die Webansicht wird ersetzt .. – simplesystems

+0

@ Simplesystems Was meinst du, die Webansicht wird ersetzt? Wenn Sie ein Bild über die Webansicht platzieren und es dann auf "Versteckt" setzen, sollten Sie in der Lage sein, die Webansicht und nicht das Bild zu sehen. Ist das nicht passiert? –

+0

Wenn Sie eine Imagansicht über eine Webansicht im Storyboard platzieren, wird die Webansicht gelöscht. – simplesystems