Détecter écran retina/iPhone 4 à l'iPhone SDK
Dans ma demande, je suis le téléchargement des images à partir du web (à partir de mon serveur pour être précis), afin d'économiser de la bande passante et en particulier de la mémoire sur le téléphone, je leur fournis en deux résolutions: 480 x 320 pour le "vieux" iPhone de la série et de 960x640 pour l'iPhone 4 avec l'écran retina. Maintenant, j'ai besoin d'être en mesure de détecter à partir de l'application lorsqu'il est exécuté sur un périphérique qui prend en charge l'écran retina. Comment pourrais-je le faire?
J'ai pensé à l'aide de l'extrait de code ci-dessous qui serait me rendre un périphérique spécifique identificateur, tel que par exemple. "iPhone3", mais alors je serais la limitation de la détection de l'iPhone4 et aurait besoin de mettre à jour le code pour tout autre appareil doté d'un écran retina.
size_t size;
//Set 'oldp' parameter to NULL to get the size of the data
//returned so we can allocate appropriate amount of space
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
//Allocate the space to store name
char *name = malloc(size);
//Get the platform name
sysctlbyname("hw.machine", name, &size, NULL, 0);
//Place name into a string
NSString *machine = [NSString stringWithCString:name];
Est-il mieux soution (peut-être que c'est très évident, mais je l'ai raté)?
Vous devez vous connecter pour publier un commentaire.
Juste fait un peu de lecture sur le site officiel des Développeurs Apple Forums et les questions a été discutée en détail là. Le meilleur moyen me semble être l'utilisation de la
scale
propriété deUIScreen
. Bien qu'il n'est disponible que dansiOS 4
et plus tard, il vous dira tout ce que vous devez savoir et sera plus susceptible de jouer un rôle encore plus important dans le futur (déjà remarqué que l'écran de l'iPad résolution de 1024x768 est exactement 32/15 * 480x320?).Si vous avez encore une autre idée, n'hésitez pas à poster ça 🙂
Voici un peu de code pour faire de la bonne façon à la fois pour iOS 3.x et 4.x:
Une petite mise à jour sur la réponse de Scott Gustafson:
Si nous devons faire une distinction entre l'iPad/Retina/iphone:
- Je obtenir réel la taille de l'écran (en pixels) de cette manière:
Aller avec Robin réponse. Une autre remarque: si vous avez besoin de vérifier le nom de l'appareil, il suffit d'utiliser les méthodes sur UIDevice.
Et pour ceux qui veulent juste faire un copier/coller comment détecter iphone/iphone_retina/ipad/ipad_retina, voici ce que j'ai fait après la lecture de ce thread. Fortement inspiré par Guntis Treulands contribution, qui à son tour étendu sur Scott Gustafsons réponse.
Si vous êtes à l'aide de Cocos2d, essayez les solutions suivantes:
[[CCDirector sharedDirector] winSizeInPixels];
Il sera de retour une
CGSize
avec des propriétéswidth
etheight
.Bien que vous avez déjà sélectionné une réponse, il y a un moyen beaucoup plus facile lorsque traitant spécifiquement avec les images donc je vais le mentionner ainsi.
Si vous incluez les deux images dans votre ensemble de deux tailles (320x480 et 640x960) et de vous ajouter "@2x" à la fin de la dernière image du nom de fichier, [UIImage imageNamed:] va automatiquement chercher la petite image pour les appareils plus anciens, et l'2x pour les appareils avec un écran retina, à condition de laisser de côté l'image de suffixe. Ex.:
2 images nommées @"de l'image.png" et @"[email protected]", à la fois inclus dans l'app bundle.
Puis composez le:
C'est aussi la façon dont les icônes d'application et l'écran de chargement de travail.