50 votes

Affichage Retina et [UIImage initWithData].

J'ai besoin d'initialiser des images à partir de données brutes téléchargées depuis un serveur qui délivre la taille correcte de l'image en fonction du type de client iPhone.

Je sais que je dois définir la valeur de l'échelle à 2.0 sur l'écran 640x960, mais il s'agit d'une propriété en lecture seule qui ne peut pas être définie pendant l'init en utilisant initWithData.

Des idées ?

94voto

tc. Points 23958

Je ne connais rien que vous puissiez intégrer dans les données de l'image elle-même pour indiquer au téléphone qu'il s'agit d'une image @2x, mais quelque chose comme ceci devrait fonctionner :

UIImage * img = ...;
img = [UIImage imageWithCGImage:img.CGImage scale:2 orientation:img.imageOrientation];

19voto

deniskurt Points 178

Depuis iOS 6.0 UIImage a méthode + imageWithData:scale: vous pouvez passer 2.0 comme échelle pour la rétine.

8voto

Phil Loden Points 510

Vous pouvez passer [[UIScreen mainScreen] scale] comme paramètre d'échelle au lieu de 2.0f .

-1voto

user2387149 Points 284

M si vous voulez ou dans une classe importée (la syntaxe de c est plus agréable quand on appelle la fonction IMAO).

BOOL isRetina(){
    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
        return [[UIScreen mainScreen] scale] == 2.0;
    }
    return NO;
}

Ensuite, lors de la création de l'image avec les données du serveur :

[UIImage imageWithData:dataFromServer scale:isRetina()?2:1];

-4voto

Rengers Points 4701

AFAIK, vous n'avez pas besoin de définir vous-même la valeur de l'échelle. Le système d'exploitation se chargera de la conversion des points en pixels pour vous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X