Bietet das iOS SDK eine einfache Möglichkeit, um zu überprüfen, ob das aktuelle Gerät über ein hochauflösendes Display (Retina) verfügt?
Der beste Weg, den ich jetzt gefunden habe, ist:
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) {
// RETINA DISPLAY
}
ios
iphone
retina-display
uiscreen
Pierre Valade
quelle
quelle
Antworten:
Um die Retina-Anzeige auf allen iOS-Geräten zuverlässig zu erkennen, müssen Sie überprüfen, ob auf dem Gerät iOS4 + ausgeführt wird und ob die
[UIScreen mainScreen].scale
Eigenschaft gleich 2.0 ist. Sie können NICHT davon ausgehen, dass auf einem Gerät iOS4 + ausgeführt wird, wenn diescale
Eigenschaft vorhanden ist, da das iPad 3.2 diese Eigenschaft ebenfalls enthält.Auf einem iPad mit iOS3.2 gibt die Skalierung im 1x-Modus 1.0 und im 2x-Modus 2.0 zurück - obwohl wir wissen, dass das Gerät kein Retina-Display enthält. Apple hat dieses Verhalten in iOS4.2 für das iPad geändert: Es gibt 1.0 sowohl im 1x- als auch im 2x-Modus zurück. Sie können dies selbst im Simulator testen.
Ich
-displayLinkWithTarget:selector:
teste die Methode auf dem Hauptbildschirm, der in iOS4.x, aber nicht in iOS3.2 vorhanden ist, und überprüfe dann die Skalierung des Bildschirms:quelle
[UIDevice currentDevice].systemVersion]
. In diesem Fall wäre esNSString *currentSystemVersion = [[UIDevice currentDevice] systemVersion]; return [currentSystemVersion compare:version options:NSNumericSearch];
Die Antwort von @ sickp ist richtig. Fügen Sie diese Zeile zur Vereinfachung in Ihre Shared.pch-Datei ein:
Dann können Sie in jeder Datei einfach Folgendes tun:
quelle
quelle
?1:0
? Wiederholt das nicht nur das, was bereits im booleschen Teil des Ausdrucks berechnet wurde?Hier ist eine praktische schnelle Erweiterung:
Update für Swift v5:
Verwendung:
Original:
Verwendung:
quelle
Dieser Ausschnitt ...
Wird zurückgegeben ... 0 für iPhone / iPod touch mit Standardauflösung, 1 für iPhone mit Netzhaut, 2 für iPad mit Standardauflösung, 3 für iPad mit Netzhaut.
quelle
SSToolkit hat eine Methode, die dies tut:
http://sstoolk.it/documentation/Categories/UIScreen(SSToolkitAdditions).html
Es wird folgendermaßen verwendet:
quelle
Es ist immer etwas zwielichtig, Gleitkommawerte auf Gleichheit zu vergleichen. Ich gehe lieber für beides
oder
quelle
isRetina = [UIScreen mainScreen].scale > 1.95
. Dies wird auch den Vorteil haben, widerstandsfähig zu sein, wenn @ 4x kommt :)Dies ist ein Riff zu Matt MCs Antwort oben. Nur eine Kategorie auf
UIScreen
.quelle
alreadyChecked
kostenlos ist, aber es ist in Ordnung.Schnelle Version der obigen Antworten mit einer Skala von> = 2,0, sodass das iPhone 6+ und andere zukünftige Geräte mit einer Skala über der Retina enthalten sind:
quelle
Um die Antwort von @sickp und den folgenden Kommentar von @ n13 zu kombinieren, habe ich dies zu einer UIScreen-Kategorie gemacht, die anscheinend gut funktioniert. Die Prüfung wird beim ersten Aufruf durchgeführt und dann für spätere Anrufe gespeichert.
Könnte für jemanden nützlich sein.
quelle
(Util)
anstatt(RetinaCheck)
... vielleicht ist es weniger klar, aber es eignet sich für andere Zwecke. Ich würde auch die MethodeisRetinaDisplay
oder etwas nennen, das damit beginntis
, aber vielleicht habe ich die Richtlinien für Obj-C nie verstanden. Ich bin auch ein Fan von,> 1.0
aber wer weiß, was in Zukunft Sinn macht.quelle
Versuche dies
quelle
Modifizierte Version von Primulaveris zur Vereinfachung der häufigsten Anwendungsfälle. Ich bin auf Swift 2.2, aber es sollte keine Rolle spielen.
Dann benutze sie einfach so
quelle
Das hat bei mir funktioniert
quelle