Autant de personnes qui se plaignent, il semble que, dans le SDK Apple pour l'affichage de la rétine, un bogue et une imageAvithContentsOffle ne chargent pas automatiquement les images 2x. P>
J'ai trébuché dans un joli article sur la manière de faire une fonction qui détecte le facteur d'échelle Uiscreen et chargez correctement les images de faible ou élevées ( http://atasypixel.com/blog/uiimage-resolution-dependence-and-the-iphone-4s-retina-display/ a>), mais la solution charge une image 2x et a toujours le facteur d'échelle de l'image définie sur 1.0 et que ce résulte d'une image 2x échelonné 2 fois (donc, 4 fois plus grand que ce qu'il faut ressembler) P >
Imagenamed semble charger avec précision des images basses et élevées, mais aucune option pour moi. p>
Quelqu'un a-t-il une solution pour charger des images faibles / élevées qui n'utilise pas le chargement automatique d'Imagenamed ou de l'imageWithContentsOffile? (Ou éventuellement solution comment faire de l'imageWithContsentsOffle de travail correct) p>
6 Réponses :
OK, solution réelle trouvée par Michael ici: http://atasypixel.com/blog/ uIImage-résolution-Indépendance-et-iphone-4s-rétina-afficheur /
Il a compris que l'uIimage a la méthode "initwithcgimage" qui prend également un facteur d'échelle comme entrée (je suppose que la seule méthode où vous pouvez vous configurer le facteur d'échelle) P>
[UIImage initWithCGImage:scale:orientation:]
Si vous prenez en charge IOS 4.1 ou plus tard, consultez la réponse de 'Bioffe'. Beaucoup plus simple.
J'ai développé une solution de contournement abandonnée pour ce problème. Il utilise la méthode Swizzling pour remplacer le comportement de la méthode "imagewithContsentsOffile:" d'uiImage. Cela fonctionne bien sur les iPhones / iPods Pre / Post Retina. Pas sûr de l'iPad.
J'espère que cela est d'aide. P>
Bonjour Marco, comme décrit dans la question - les noms des fichiers ne sont pas un problème du tout, mais le facteur d'échelle de l'image elle-même.
Bonjour ICAN, mon code définit correctement le facteur d'échelle (testé dans Simulator avec OS 4.0.1 et 4.1). Le point est que, tandis que ImageWithContsentsOffle: ne trouve pas automatiquement la variante "@x", comme vous le dites, une fois que vous l'avez instructué d'obtenir le fichier "@x" directement (comme dans ma méthode Swizzled), il définit ensuite correctement le facteur d'échelle. Il suffit de laisser tomber mes deux catégories quelque part dans votre code où ils sont compilés et essayez d'utiliser imageWithContentsOffile: comme vous le feriez s'il n'était pas cassé
imageWithContsentsOffile code> fonctionne correctement (en considérant @ 2x images avec une échelle correcte) commençant iOS 4.1 et à l'envers. p>
Malgré la documentation dit, imageWithContentsOffile: code> ne fonctionne pas sur des chemins absolus. Testé sur iOS 5.1
Cela ne fonctionne pas sur le chemin absolu d'images dans le dossier de caches pour moi. Enquêtera plus loin, peut-être que c'était un mauvais test.
Ne fonctionne pas sur iOS 5.1 SIM pour la rétine iPad. Utilisation de [UIIMAGE ImageWithContentsOffile: [[[[[Nsbundle MainBundle] Pathforresource: @ "image.png" de type: nil]]
@Jarson je l'utilise presque de la même manière, mais différemment [UIImage ImageWithContentsOffile: [[[Nsbundle MainBundune] Pathforresource: @ "Image" de type: @ "png"]]
@bioffe j'ai essayé de séparer l'extension dans le spécificateur de type et il n'y avait pas de changement de comportement.
@Jarson Ma suggestion pour vous est de poster votre code. Cela fonctionne pour moi depuis iOS 4.1 pour moi.
+1 Je peux confirmer que @ 2x Chargement fait I> fonctionne pour moi à l'aide de l'imageWithContsentsOffile sur iOS5.1 et iOS6 à l'aide de simulateurs de rétine (iPhone et iPad). Si quelqu'un vérifie le simulateur, assurez-vous que vous exécutez la version de la rétine du simulateur!
Je suis d'accord avec @OCMULUS, ça marche. Ne vérifiez pas la taille de l'image, car cela est en points, pas en pixels.
Voici une solution: P> [UIIMAGE ImageWithContentsOffile:] code> ne charge pas @ 2x graphiques si vous spécifiez un chemin absolu.
- (UIImage *)loadRetinaImageIfAvailable:(NSString *)path {
NSString *retinaPath = [[path stringByDeletingLastPathComponent] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@@2x.%@", [[path lastPathComponent] stringByDeletingPathExtension], [path pathExtension]]];
if( [UIScreen mainScreen].scale == 2.0 && [[NSFileManager defaultManager] fileExistsAtPath:retinaPath] == YES)
return [[[UIImage alloc] initWithCGImage:[[UIImage imageWithData:[NSData dataWithContentsOfFile:retinaPath]] CGImage] scale:2.0 orientation:UIImageOrientationUp] autorelease];
else
return [UIImage imageWithContentsOfFile:path];
}
Nous venons de courir ici ici au travail.
Voici mon travail autour qui semble tenir de l'eau:
Améliorer la réponse de Lisa Rossellis pour maintenir les images de la rétine à la taille souhaitée (pas les augmenter):
NSString *imagePath = ...Path to your image UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfFile:imagePath] scale:[UIScreen mainScreen].scale];