2012-07-15 15 views
6

Ho alcune immagini che ho bisogno di ottenere dal web. Basta usare i dati da un URL.
Devono essere visualizzati correttamente sul display Retina.
Quando ottengo le immagini dal web, sembrano ancora pixelate. Ho bisogno di impostare la scala delle immagini su retina display (2.0), ma mi manca qualcosa. Ecco cosa ho fatto finora.Retina display per un'immagine dall'URL

UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:@"http://www.msdomains.com/tmp/test.png"]; 

CGRect labelFrame = CGRectMake(0,0,64,64); 
UIImageView *imageView = [[UIImageView alloc] initWithFrame:labelFrame]; 
imageView.contentScaleFactor = [UIScreen mainScreen].scale; 

[imageView setImage:img]; 
[self addSubview:imageView]; 
[imageView release]; 

risposta

3

Il codice dovrebbe funzionare più o meno come-è. Non so quali fossero le dimensioni originali della tua immagine, ma immagino che fossero 64x64 px. Per ridimensionare correttamente, l'immagine originale deve essere 128x128 px.

Come test, il seguente codice visualizzato correttamente la mia foto in risoluzione Retina sul simulatore, e sul mio iPhone 4:

UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.seenobjects.org/images/mediumlarge/2006-08-19-native-lilac.jpg"]]]; 

CGRect labelFrame = CGRectMake(0, 0, 375, 249.5); 
UIImageView *imageView = [[UIImageView alloc] initWithFrame:labelFrame]; 

[imageView setImage:img]; 
[self.view addSubview:imageView]; 

Si noti che il UIImageView è 375x249.5 punti, che è la metà della dimensioni originali (pixel) della foto. Inoltre, non è stato necessario impostare contentScaleFactor.

(Per inciso, non riesco a vedere che specifica @2x sull'URL contribuirà, in questo caso, come la chiamata a dataWithContentsOfURL: restituirà un blob opaca dei dati, senza alcuna traccia del nome del file a sinistra. E 'che dati opachi passati a imageWithData: per caricare l'immagine)

7

Prova ad aggiungere #@2x.png alla fine del tuo URL. Questo non cambierà l'URL, ma l'immagine verrà riconosciuta come un'immagine retina @ 2x. Ha funzionato per me, ma ho usato questo metodo con SDWebImage.

ad es. utilizzando http://www.msdomains.com/tmp/test.png#@2x.png.

+0

È vero? – Ali

+0

non funziona per me –

+0

è uno scherzo? – deadlock

0

Per il display retina, aggiungere la stessa immagine con la risoluzione che è esattamente il doppio dell'immagine originale. non dimenticare di aggiungere "@ 2x" alla fine di questo nome immagine ... ad es. "image_header.png" è un'immagine 320x100 poi un'altra immagine con nome "[email protected]" (dimensione 640x200) saranno selezionati per il display retina automaticamente dal sistema operativo ... Speranza che aiuta

+0

Ti manca il punto qui: quello che suggerisci è corretto per le immagini caricate dal bundle principale, il gioco è fatto. – Ali

0

quando si assegna direttamente l'URL dell'immagine a imageView, non lo prenderà come retina.

imageView.imageURL = [NSURL URLWithString:@"http://example.com/image.png"]; 

non ti darà un'immagine retina.

Quindi, inspite la tua immagine è 200x200 ma se imageView è 100x100 allora prenderà 100x100 dall'immagine scaricata e mostrerà l'immagine pixelata sui dispositivi retina.

La soluzione sarebbe utilizzare la proprietà image di imageView anziché imageURL.

imageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://example.com/image.png"]]]; 

Ciò assegnerà un'immagine 200x200 all'immagineView di 100x100 e quindi l'immagine non verrà pixelata.

Problemi correlati