Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.

Web View'da websitesi yüklenirken Progress View ile ilerlemeyi gösterme?

0 oy
80 kez görüntülendi
2, Mart, 2016 ios development kategorisinde csayin tarafından soruldu
Merhabalar

bir web view uygulaması için çalışıyorum. uygulamada web view'da sayfa yüklenirken web view'ın hemen üstünde progress view'da yüklemenin ilerlemesini göstermek istiyorum. bu iki nesneyi birbirine bu yapıya uygun nasıl ilişkilendirebileceğim hakkında bilgisi olan var mi acaba?

1 cevap

0 oy
2, Mart, 2016 yasin tarafından cevaplandı
14, Mart, 2016 csayin tarafından seçilmiş
 
En İyi Cevap

UIWebView'i kullanarak yüklediğiniz içeriğin yüklenme durumuna ilişkin anlık ilerleme bilgilerini alamazsınız.
sadece UIWebViewDelegate metodları olan webViewDidStartLoad ve webViewDidFinishLoad'ı kullanarak iki metodun çağrılması arasındaki süreyi hesaplayarak bir progress bar hazırlayabilirsiniz.
ama bu da gerçek anlamda data'nın ne kadarının yüklenip yüklenmediğini gösteren bir araç olmayacaktır.
NSURLConnection'ı kullanarak alınan data'nın ilerleme durumunu elde edebilirsiniz.
aşağıdaki link üzerinde bu konuyla alakalı örneği inceleyebilirsiniz.

http://www.devfright.com/ios-data-download-progress-bar-tutorial/

2, Mart, 2016 csayin tarafından yorumlandı
teşekkur ederim hocam. verdiginiz linkteki uygulamayi inceledim. kodu swift'e cevirmeye calistim sadece asagidaki fonsiyonda

"        self.progressView.progress = ((100.0/self.urlResponse.expectedContentLength)*self.downloadedMutableData.length)/100
"
satırda  "Binary operator '/' cannot be applied to operands of type 'Double' and 'Int64'"

hatası alıyorum ve bi cözüm bulamadim. siz bi fikir verebilirmisiniz acaba?


func connection(connection: NSURLConnection, didReceiveData data: NSData) {
        self.downloadedMutableData.appendData(data)
        self.progressView.progress = ((100.0/self.urlResponse.expectedContentLength)*self.downloadedMutableData.length)/100
        if self.progressView.progress == 1 {
            self.progressView.hidden = true
        } else {
            self.progressView.hidden = false
       
        }
        print("%.0f%")
    }
2, Mart, 2016 yasin tarafından yorumlandı
atamaya çalıştığınız değeri Double içine alın. şöyle yani,

Double(((100.0/self.urlResponse.expectedContentLength)*self.downloadedMutableData.length)/100)
2, Mart, 2016 csayin tarafından yorumlandı
ben bunu denemiştim hocam aynı hatayı vermeye devam ediyor.
2, Mart, 2016 csayin tarafından yorumlandı
kodun swifte cevirmeye calistigim hali:

import ViewController

class ViewController, NSURLConnectionDataDelegate{

    @IBOutlet weak var progressView: UIProgressView!
    @IBOutlet weak var scrollView: UIScrollView!

    var connectionManager: NSURLConnection?
    var downloadedMutableData: NSMutableData?
    var urlResponse: NSURLResponse?
   
    func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.downloadedMutableData = NSMutableData()
        var urlRequest: NSURLRequest = NSURLRequest.requestWithURL(NSURL(string: "http://www.devfright.com/wp-content/uploads/2014/05/iPhone4Wallpaper.jpg"), cachePolicy: NSURLRequestReloadIgnoringLocalCacheData, timeoutInterval: 60.0)
        self.connectionManager = NSURLConnection(request: urlRequest, delegate: self)
    }
   
    func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
   
    // MARK: - Delegate Methods
    func connection(connection: NSURLConnection, didReceiveResponse response: NSURLResponse) {
        print("\(response.expectedContentLength)")
        self.urlResponse = response
    }
   
    func connection(connection: NSURLConnection, didReceiveData data: NSData) {
        self.downloadedMutableData.appendData(data)
        self.progressView.progress = ((100.0/self.urlResponse.expectedContentLength)*self.downloadedMutableData.length)/100
        if self.progressView.progress == 1 {
            self.progressView.hidden = true
        } else {
            self.progressView.hidden = false
       
        }
        print("%.0f%")
    }
   
    func connectionDidFinishLoading(connection: NSURLConnection) {
        print("Finished")
        self.imageView.image = UIImage(data: self.downloadedMutableData)
    }
   
}
2, Mart, 2016 yasin tarafından yorumlandı
self.urlResponse.expectedContentLength datatype'i long long
ve
self.downloadedMutableData.length datatype'ı da  NSUInteger

bunları ayrı ayrı double'a alın

((100.0/Double(self.urlResponse.expectedContentLength))*Double(self.downloadedMutableData.length))/100
8, Mart, 2016 csayin tarafından yorumlandı
hocam obj-c'den çevirirken bazı hatalar yaptım. düzeltmeye çalıştım ancak buradan ileri götüremedim. yapmaya çalıştığım islemi bir ornek uygulamaya doktum inceleyip hatalarımı nasıl düzeltmem gerektiği hakkında yardımcı olabilirseniz sevinirim.

https://drive.google.com/file/d/0B-mxXNuEWybRZmw0blpuWTh1YnM/view
9, Mart, 2016 csayin tarafından yorumlandı
sorunu çözdüm yapıya ait kodları aşağıda paylaşıyorum konu başlığından bakıp ilgilenen arkadaşlar için.. :


import UIKit

class ViewController: UIViewController, NSURLConnectionDataDelegate{

    @IBOutlet weak var progressView: UIProgressView!
    @IBOutlet weak var webView: UIWebView!
    
    
    var connectionManager: NSURLConnection?
    var downloadedMutableData: NSMutableData?
    var urlResponse: NSURLResponse?
    
    override func viewDidLoad() {
        
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        
        self.downloadedMutableData = NSMutableData()
        
        let urlRequest = NSURL(string: "http://www.apple.com");
        let cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData;
        let request = NSMutableURLRequest(URL: urlRequest!, cachePolicy:cachePolicy, timeoutInterval: 60.0);
        
        
        
        self.connectionManager = NSURLConnection(request: request, delegate: self);
        self.webView.loadRequest(request);
        
        
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    // MARK: - Delegate Methods
    func connection(connection: NSURLConnection, didReceiveResponse response: NSURLResponse) {
        print("\(response.expectedContentLength)")
        self.urlResponse = response
    }
    
    func connection(connection: NSURLConnection, didReceiveData data: NSData) {
        self.downloadedMutableData!.appendData(data)
        
        
        self.progressView.progress = Float32( Double(100.0) / Double(self.urlResponse!.expectedContentLength) * Double(self.downloadedMutableData!.length) / Double(100.0))
            
        
        
        
        if self.progressView.progress == 1 {
            self.progressView.hidden = false
        } else {
            self.progressView.hidden = false
            
        }
        print("%.0f%")
    }
    
    func connectionDidFinishLoading(connection: NSURLConnection) {
        print("Finished")
        //self.imageView.image = UIImage(data: self.downloadedMutableData!)
    
    }

}
...