2016-04-29 15 views
0

Ich versuche gerade, einen progressiven JPG-Lader zu erstellen. Wenn ein großes Bild an meine NSURLConnection übergeben wird, scheint es die Hälfte des Bildes wegzuschneiden.Progressive JPG-Download mit NSURLConnection

Hier ist meine didReceiveData Methode und das Bild wird die Daten zugeordnet:

func connection(connection: NSURLConnection!, didReceiveData data: NSData!){ 
    if let img: UIImage = UIImage(data: data){ 
     imageView.image = img 
    } 
    print("didReceiveData") 
} 

Es scheint der letzte Teil der Daten zu überspringen um das Bild zu vervollständigen. Ein Beispiel Bild ist:

Greyed image

Dieses Bild zum connectionDidFinishLoading als abgeschlossen geben wird aber eindeutig nicht. Hat jemand irgendwelche Ideen, warum das passieren würde?

Antwort

0

Der Delegat optional public func connection(connection: NSURLConnection, didReceiveData data: NSData) soll Callback sein, um Daten inkrementell zu laden. Bei jedem Anruf erhalten Sie die neu verfügbaren Daten. Wenn Sie also versuchen, ein Bild mit den empfangenen Daten zu erstellen, wird es nicht das fertige Bild sein. Stattdessen sollten Sie versuchen, dies

@IBOutlet weak var imageView: UIImageView! 
    var receivedData = NSMutableData() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     let imageURL = "https://www.nasa.gov/sites/default/files/styles/full_width_feature/public/thumbnails/image/leisa_christmas_false_color.png?itok=75o-jlD5"; 
     let request = NSURLRequest(URL: NSURL(string: imageURL)!) 
     let urlConnection = NSURLConnection(request: request, delegate: self, startImmediately: true) 
     urlConnection?.start() 
    } 

extension ViewController: NSURLConnectionDelegate, NSURLConnectionDataDelegate { 

    func connection(connection: NSURLConnection, didReceiveData data: NSData) { 
     self.receivedData.appendData(data) 
    } 

    func connectionDidFinishLoading(connection: NSURLConnection) { 
     self.imageView.image = UIImage(data: receivedData) 
    } 
} 

Ich hoffe, dies würde Ihnen helfen.