web-dev-qa-db-fra.com

Catalogue d'actifs spécifique à l'appareil Xcode 6

J'essaie de mettre à jour mon application pour les nouveaux appareils 6 et 6+.

J'ai ajouté des images de lancement pour les nouvelles tailles d'iPhone (6 et 6 ans et plus). Le catalogue d’actifs contient des entrées pour les 6 et les 6 ans et plus. Pas de problème là-bas.

J'ai également des images de superposition en plein écran que je dois également ajouter. J'ai déjà des images pour ces @ 2x (iPhone 4s) et R4 (iPhone 5 5s 5c). J'ai créé des images dans les nouvelles tailles de résolution, mais je ne sais pas comment les ajouter à un ensemble d'images.

Lorsque je vais dans le catalogue d’actifs, je peux choisir un ensemble d’images spécifique à un appareil et voir les entrées pour iPhone, Retina-4 et iPad. Il existe des puits glisser/déposer pour 1x, 2x, Retina 4 2x et 3x.

Ma question - où dois-je placer l'image pour l'iPhone 6? Évidemment, le 3x est pour le 6 plus. Je ne vois pas comment le puits retina-4 peut être utilisé à la fois pour l'iPhone 5 et l'iPhone 6, car les tailles d'écran sont différentes.

Qu'est-ce que je rate?

31
Kurt Schwartz

Je suis à peu près certain qu'il s'agit d'un bogue dans Xcode 6. Lorsque vous chargez une image à partir d'un jeu d'images du catalogue d'actifs, vous obtenez toujours l'entrée 3x pour un iPhone 6+, que vous utilisiez le mode d'affichage zoomé ou standard. Pour un iPhone 6, vous obtiendrez toujours l'entrée 2x dans les deux modes. Pour un iPhone 4s, vous obtiendrez également l'entrée 2x.

Tous ces appareils ont des rapports d’échelle et de format différents, ce qui n’est pas acceptable pour des images précises au pixel près. Mes images sont toutes en plein écran et doivent être superposées. Je voyais donc un placement incorrect en mode zoomé.

J'ai résolu ce problème en créant deux ensembles d'images:
1) iPhone 6/6plus en mode standard
Image 1242x2208 dans l'entrée 3x
750x1334 dans l'entrée 2x 

2) iPhone 6/6Plus en mode zoomé ou iPhone 5
1125x2001 pour l'entrée 3x
640x1136 pour l'entrée 2x
640x1136 pour l'entrée R4-2x 

Pour que cela fonctionne, je dois ensuite déterminer si le périphérique est l'un des nouveaux et s'il est en mode zoomé. Sur la base de ces informations, je charge l'image à partir du jeu d'images correct.

C'est le code que j'utilise pour déterminer si le périphérique est l'un des nouveaux en mode zoom/standard:

UIScreen *screen = [UIScreen mainScreen];
if (screen.scale == 3 && screen.currentMode.size.width == 1242 ||
    screen.scale == 2 && screen.currentMode.size.width == 750) {
    self.overlay = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"StdImageSet"]];
} else {
    self.overlay = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ZoomedImageSet"]];
}

C'est moche, et je déteste avoir à faire cela, car les ensembles d'images sont supposés éliminer ce type de code. Je n'ai pas vu de meilleur moyen de contourner ce problème et j'ai déposé un bogue radar (radar 18463463).

6
Kurt Schwartz

C'est vraiment énervant. Pour un réglage spécifique à l’appareil, nous nous attendons tous à un menu similaire à LaunchImage Set, à des espaces réservés différents pour des tailles d’écran différentes.

5
trppr

J'ai trouvé cela utile: http://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions

Il semblerait que l'iPhone 6 utilise une image rééchantillonnée @ 2x (iPhone 5). En outre, les propriétés du jeu d'images (volet Utilitaires) vous permettent de basculer entre les puits d'images "Universel" (x1, x2, x3) et "Spécifique à l'appareil".

5
Anthony Scott

Je place ici certaines de mes observations que j'ai faites pour les appareils iPhone (peut-être que quelqu'un trouvera cela utile):

  1. iPhone 4S - vignette 2x Any/Any
  2. iPhone 5 - vignette 2x 1GB/Any
  3. iPhone 5S - vignette 2x 1GB/Any
  4. iPhone 6 - vignette 2x 1GB/Any
  5. iPhone 6 Plus - vignette 3x 1GB/Any

Pour ce faire, j'ai vérifié Périphériques - iPhone, mémoire 1 Go. Comme vous pouvez le constater, il n'y a pas de distinction pour les graphiques entre iPhone 5/5S/6. Jouer avec les paramètres de Metal 1v2/2v2 pourrait peut-être faire la différence, mais cela me donne l’impression de devenir trop fou. La référence de connaissance commence à 10:50

Ce que la WWDC m'a apporté à l'heure actuelle, nous devrions penser non pas aux spécificités de la résolution/du périphérique/de l'orientation du périphérique, mais plutôt aux classes de taille (identiques pour les iPhones sauf 6 Plus), mais si quelqu'un souhaite toujours, pour certaines raisons, utiliser les graphiques spécifiques à ce périphérique et veut utiliser les catalogues d'actifs (qui sont excellents), alors voici ce que j'ai trouvé disponible pour le moment (Xcode 7).

5
Julian Król

Je viens de trouver une nouvelle solution à ce problème. Utilisez 2x l’image retina 4 et réglez le modèle de contenu de la vue de l’image en plein écran sur l’agrandissement du remplissage d’aspect pour le faire fonctionner à la fois sur iPhone 4s et iPhone 6.

1
Peng90