Le SDK iOS offre-t-il un moyen facile de vérifier si le périphérique actuel dispose d'un écran haute résolution (rétine)?
La meilleure façon de le faire maintenant est:
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) {
// RETINA DISPLAY
}
ios
iphone
retina-display
uiscreen
Pierre Valade
la source
la source
Réponses:
Afin de détecter l'affichage Retina de manière fiable sur tous les appareils iOS, vous devez vérifier si l'appareil exécute iOS4 + et si la
[UIScreen mainScreen].scale
propriété est égale à 2.0. Vous NE POUVEZ PAS supposer qu'un appareil exécute iOS4 + si lascale
propriété existe, car l'iPad 3.2 contient également cette propriété.Sur un iPad exécutant iOS3.2, l'échelle renverra 1,0 en mode 1x et 2,0 en mode 2x - même si nous savons que l'appareil ne contient pas d'écran Retina. Apple a changé ce comportement dans iOS4.2 pour l'iPad: il renvoie 1.0 dans les modes 1x et 2x. Vous pouvez le tester vous-même dans le simulateur.
Je teste la
-displayLinkWithTarget:selector:
méthode sur l'écran principal qui existe dans iOS4.x mais pas iOS3.2, puis vérifie l'échelle de l'écran:la source
[UIDevice currentDevice].systemVersion]
. Dans ce cas, ce seraitNSString *currentSystemVersion = [[UIDevice currentDevice] systemVersion]; return [currentSystemVersion compare:version options:NSNumericSearch];
La réponse de @ malade est correcte. Juste pour faciliter les choses, ajoutez cette ligne dans votre fichier Shared.pch:
Ensuite, dans n'importe quel fichier, vous pouvez simplement faire:
la source
la source
?1:0
? N'est-ce pas simplement réitérer ce qui a déjà été calculé dans la partie booléenne de l'expression?Voici une extension rapide et pratique:
Mise à jour pour Swift v5:
Usage:
Original:
Usage:
la source
Cet extrait ...
Sera de retour ... 0 pour iPhone / iPod touch de résolution standard, 1 pour iPhone rétine, 2 pour iPad résolution standard, 3 pour iPad rétine.
la source
SSToolkit a une méthode qui fait ceci:
http://sstoolk.it/documentation/Categories/UIScreen(SSToolkitAdditions).html
Il est utilisé de la manière suivante:
la source
Il est toujours un peu louche de comparer des valeurs à virgule flottante pour l'égalité. Je préfère y aller soit
ou
la source
isRetina = [UIScreen mainScreen].scale > 1.95
. Cela aura également l'avantage d'être résilient quand @ 4x arrive :)Ceci est un riff sur la réponse de Matt MC ci-dessus. Juste une catégorie
UIScreen
.la source
alreadyChecked
est gratuite, mais ça va.Version Swift des réponses ci-dessus, avec une échelle> = 2.0, ce qui inclut l'iPhone 6+ et d'autres futurs appareils avec une échelle supérieure à Retina:
la source
Juste pour combiner la réponse de @sickp et le commentaire suivant de @ n13, j'en ai fait une catégorie UIScreen qui semble bien fonctionner. La vérification est effectuée la première fois que vous l'appelez, puis enregistrée pour les appels ultérieurs.
Pourrait être utile à quelqu'un.
la source
(Util)
au lieu de(RetinaCheck)
... c'est peut-être moins clair, mais cela se prête à d'autres utilisations. Je nommerais également la méthodeisRetinaDisplay
ou quelque chose qui commence paris
, mais peut-être que je n'ai jamais compris les directives pour Obj-C. De plus, je suis fan de> 1.0
mais qui sait ce qui aura du sens à l'avenir.la source
essaye ça
la source
Version modifiée de primulaveris pour la simplicité des cas d'utilisation les plus courants. Je suis sur Swift 2.2 mais cela ne devrait pas avoir d'importance.
Ensuite, utilisez-les simplement comme ceci
la source
Cela a fonctionné pour moi
la source