2011-04-01 33 views
25

Bazı URL'lerden bir görüntü indirmemiz ve iki tür cihazda göstermemiz gerektiğinde - Retina (2x görüntülü) ve normal cihaz - İki farklı resmimiz olmalı mı Bunu işlemek için URL'ler?Normal görüntünün indirilmesi Vs retina cihaz görüntüsü (2x)

Kaynak paketindeki görüntüler için hem xyz.png hem de [email protected] adreslerini ve çalışma koşullarını koruyoruz.

Sunucudan getirdiğimiz görüntüler için, her iki görüntü için ayrı resim URL'lerine sahip olmalı ve bunları aynı adlandırma kuralıyla yerel olarak önbelleğe almalıyız (xyz.png ve [email protected])?

Lütfen buraya biraz ışık atın.

cevap

24

Aygıtın yüksek çözünürlüklü retina ekranına sahip olup olmadığını kontrol edebilir ve buna bağlı olarak farklı bir görüntüyü indirebilirsiniz. Arabirim boyutu için zaten ölçeklediğiniz fotoğraf ve içerikleri rahatsız etmeyin.
Bir ölçekli 100x100 görüntü (2.0 ölçek), bir 50x50 puan görüntü haline gelecektir unutmayın

UIImage *image = //download... 
image=[UIImage imageWithCGImage:[image CGImage] scale:2.0 orientation:UIImageOrientationUp]; 

ile indirilen resmin ölçekli sürümünü oluşturabilirsiniz.

Kontrol Eğer bir retina ekrana test burada

BOOL retina = NO; 
if([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) 
    retina = [[UIScreen mainScreen] scale] == 2.0 ? YES : NO; 
+0

Bir sorum var ilk eğer. Biz dosya sisteminde bu görselin önbelleğe gerekiyorsa o zaman [email protected] formatıyla kaydetmek gerekir? Böylece IOS dosya sisteminden aldığımızda onu tanıyabilirdi. – Abhinav

+2

@ 2x sihirli sadece '[UIImage imageNamed: "foo" @] ile çalışır @Abhinav;' Ve bu yöntem yalnızca paket kaydedilir görüntüleri ile çalışır. Ve paket yazılabilir değil, resimlerinizi orada kaydedemezsiniz. Yani bunun için bir avantajınız yok. AMA kullanıcı itunes herşeyi kaydeder, eski bir cihazda yazılımını kullanabilir, sonra da retina ekranlı bir cihaz satın alır ve tüm görüntü verileri ile yedekleme geri yükler. O zaman normal görüntüleri bir retina cihazında kullanırdı. Bu nedenle, @ 2x uzantısını yine de kullanmanızı öneririm, ancak bunu manuel olarak yönetmelisiniz. –

+0

Tamam. Bu yüzden bir retina cihazdır ya da IOS bu işleme olmayacak gibi bu adla sonradan okunacak diye biz hala dosya adında ayırt etmek gerekir olup olmadığını dayalı. – Abhinav

0
CGFloat screenScale = [UIScreen mainScreen]. 
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:myUrl] scale:screenScale]; 
İlgili konular