Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.
0 oy
696 kez görüntülendi
ios development kategorisinde tarafından
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
tarafından
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/

tarafından
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%")
    }
tarafından
atamaya çalıştığınız değeri Double içine alın. şöyle yani,

Double(((100.0/self.urlResponse.expectedContentLength)*self.downloadedMutableData.length)/100)
tarafından
ben bunu denemiştim hocam aynı hatayı vermeye devam ediyor.
tarafından
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)
    }
   
}
tarafından
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
tarafından
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
tarafından
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!)
    
    }

}
...