Retina icônes (@2x) ne sont pas utilisés lorsque les images sont spécifiés dans le code
Je place une pièce de théâtre.image png sur mon point de vue. Lorsque la vue d'abord des charges, l'iPhone 4 attrape le correspondant [email protected] fichier et il semble grand. Cependant, lorsque j'appuie sur le bouton de lecture de mon code swaps pour la pause.fichier png. Puis, quand je me tape la pause.png pour ramener le jeu.png il utilise le jeu original.fichier png (pas le @2x version de ce que je pensais automatiquement de référence).
C'est le code que j'ai essayé de l'utiliser:
[button setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];
Donc, si j'ai les fichiers de swap après la vue initiale de la charge, dois-je spécifier manuellement l' @2x version à l'intérieur d'une instruction if? Si tel est le UIScreen.à l'échelle du meilleur de l'attribut à utiliser pour cela?
Je suis actuellement en utilisant un code comme ceci:
if ([UIScreen mainScreen].scale > 1.0)
{
[button setImage:[UIImage imageNamed:@"[email protected]"] forState:UIControlStateNormal];
}
else
{
[button setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];
}
Ça fonctionne bien, mais avoir de l'instruction if, c'est ennuyeux et il semble un peu fragile.
Merci d'avance à vous tous, smarties.
UIImage imageNamed
normalement gère automatiquement alors que d'autres méthodes ne sont pas (encore)[bouton setImage:[UIImage imageNamed:@"jouer.png"] forState:UIControlStateNormal];
pour l'instant je suis à l'aide de la suite (désolé, je ne peux pas comprendre comment formater le code comme le code): si ([UIScreen écran principal].l'échelle > 1.0) { [bouton setImage:[UIImage imageNamed:@"[email protected]"] forState:UIControlStateNormal]; } else { [bouton setImage:[UIImage imageNamed:@"jouer.png"] forState:UIControlStateNormal]; } Cela fonctionne bien, mais avoir de l'instruction if, c'est ennuyeux et il semble un peu fragile.
J'ai inséré le code de vos commentaires dans la question. Heureusement, j'ai transmis votre message correctement. Dans l'avenir, vous devriez être en mesure de modifier vos questions à insérer ce code, puis la formater à l'aide de l'option de code dans la zone d'édition de la barre d'outils au-dessus du texte (ou à l'aide de quatre espaces avant chaque ligne de code).
Merci, Brad. Donc, comme vous le savez, imageName devrait être en mesure de référence de jouer.png et auto-swap @2x version même si je fais des allers-retours entre le jeu.png et pause.png?
OriginalL'auteur nicjohnson | 2010-08-09
Vous devez vous connecter pour publier un commentaire.
Je peux confirmer que c'est un problème avec la version 4.0 de l'appareil. Le problème n'est pas qu'il ne charge pas le @2x image, elle ne fait, mais encore à l'affiche à 72 DPI (à l'origine pour être floue).
Ce bug est heureusement fixe en 4.1 (testé dans l'émulateur).
OriginalL'auteur Marius
L'instruction conditionnelle est inutile. La ligne suivante est suffisante:
Dans iOS 4.0, le imageNamed: méthode de recherche automatiquement le "@2x" suffixe de nom de fichier si l'appareil est un iPhone 4 et a l'affichage de la rétine. Dans les versions précédentes de l'iPhone OS, le imageNamed: méthode de recherche uniquement pour ce que vous écrivez (c'est à dire, l'image basse résolution). Cela fonctionne parce que l'iPhone 4 ne peut pas avoir un OS inférieur version 4.0, de sorte que votre écran retina les utilisateurs auront toujours la plus haute résolution de l'illustration.
Malheureusement, le code que vous décrivez devrait fonctionner correctement, donc je pense que le problème est ailleurs, dans votre projet. Je viens de faire un bouton avec deux images et sur chaque clic il passe; fonctionne très bien. Pourriez-vous poster tout le code concernant ce bouton?
OriginalL'auteur Arseniy Banayev
Vous pouvez simplement utiliser:
Sans l'extension. Cela va charger le @2x version si elle est disponible et si l'appareil a un x2 échelle.
Cela fonctionne pour iOS4 ou d'une râpe. Cependant, si vous voulez exécuter votre application dans les versions précédentes, vous pouvez effectuer les opérations suivantes:
L'avantage est que cela fonctionne si à tout moment vous avez @3x ou toute autre version si Apple crée de nouveaux dispositifs ou affiche.
Vous pouvez créer une méthode utilitaire pour éviter de le faire partout où vous avez besoin pour charger une image.
Voir: L'Appui Des Écrans Haute Résolution, la section "Chargement d'Images dans Votre Application"
OriginalL'auteur gimenete
Deux fautes stupides (les deux que j'ai fait avant) qui peuvent provoquer ce problème:
versions @2x au lieu de la grande
ceux
légèrement missized (pixel par pixel)
OriginalL'auteur AlcubierreDrive
J'ai rencontré le même problème, alors réalisé que mon Windows Photoshop-exportés .les fichiers png ont été .Les fichiers PNG. Apparemment, la capitalisation n'importe.
Voir aussi Hi-Res @2x image pas d'être pris pour barre d'onglet de l'élément de
OriginalL'auteur ine
Quelqu'un sur un autre thread mentionné qu'ils ont réussi à résoudre un même problème épineux par la suppression et re-ajout de leur salut-res images pour le projet.
OriginalL'auteur Tim K
J'ai eu le même problème à cause de nom de fichier - button_slice9.png et [email protected] n'a pas fonctionné.
Mais button_slice.png et [email protected] fonctionne comme prévu dans imageNamed:.
OriginalL'auteur adruzh
J'ai juste eu un problème similaire qui a pris un certain temps à comprendre. Il s'avère que mon @2x images en quelque sorte ne sont pas ajoutés à mon application cible, de sorte qu'ils n'étaient pas emballés.
OriginalL'auteur ja41
J'ai eu un problème similaire quand j'ai remplacé un faible res icône de près.png avec la haute résolution [email protected]. l'iPad s'appuie semblait ignorer le "@2x" et a chargé l'image du double de taille avec scale = 1.0. De supprimer le fichier et l'ajout n'a pas aidé. Renommer "[email protected]". Certaines mauvaises info en cache quelque part sur l'icône fermer.png
OriginalL'auteur user1055568