Czy zestaw iOS SDK zapewnia łatwy sposób sprawdzenia, czy bieżące urządzenie ma wyświetlacz o wysokiej rozdzielczości (siatkówka)?
Najlepszym sposobem, w jaki znalazłem to teraz, jest:
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) {
// RETINA DISPLAY
}
ios
iphone
retina-display
uiscreen
Pierre Valade
źródło
źródło
Odpowiedzi:
Aby niezawodnie wykryć wyświetlacz Retina na wszystkich urządzeniach z iOS, musisz sprawdzić, czy na urządzeniu działa iOS4 + i czy
[UIScreen mainScreen].scale
właściwość jest równa 2,0. NIE MOŻNA założyć, że na urządzeniu działa system iOS4 +, jeśliscale
właściwość istnieje, ponieważ iPad 3.2 również zawiera tę właściwość.Na iPadzie z iOS3.2 waga zwróci 1.0 w trybie 1x, a 2.0 w trybie 2x - mimo że wiemy, że urządzenie nie zawiera wyświetlacza Retina. Apple zmieniło to zachowanie w iOS 4.2 dla iPada: zwraca 1,0 w trybie 1x i 2x. Możesz to przetestować samodzielnie w symulatorze.
I test dla
-displayLinkWithTarget:selector:
metody na ekranie głównym, który istnieje w iOS4.x ale nie iOS3.2, a następnie sprawdzić skalę przez ekran:źródło
[UIDevice currentDevice].systemVersion]
. W tym przypadku byłby toNSString *currentSystemVersion = [[UIDevice currentDevice] systemVersion]; return [currentSystemVersion compare:version options:NSNumericSearch];
Odpowiedź @ sickp jest poprawna. Aby to ułatwić, dodaj tę linię do pliku Shared.pch:
Następnie w dowolnym pliku możesz po prostu zrobić:
źródło
źródło
?1:0
? Czy to nie tylko powtarzanie tego, co zostało już obliczone w części logicznej wyrażenia?Oto przydatne szybkie rozszerzenie:
Aktualizacja dla Swift v5:
Stosowanie:
Oryginalny:
Stosowanie:
źródło
Ten fragment kodu ...
Wróci ... 0 dla standardowej rozdzielczości iPhone / iPod touch, 1 dla Retina iPhone, 2 dla standardowej rozdzielczości iPad, 3 dla Retina iPad.
źródło
SSToolkit ma metodę, która robi to:
http://sstoolk.it/documentation/Categories/UIScreen(SSToolkitAdditions).html
Jest on używany w następujący sposób:
źródło
Porównywanie wartości zmiennoprzecinkowych dla równości zawsze wydaje się nieco podejrzane. Wolę wybrać jedno lub drugie
lub
źródło
isRetina = [UIScreen mainScreen].scale > 1.95
. Będzie to miało również tę zaletę, że będzie odporny na pojawienie się @ 4x :)To riff na powyższej odpowiedzi Matta MC. Tylko kategoria na
UIScreen
.źródło
alreadyChecked
jest bezpłatne, ale jest w porządku.Szybka wersja powyższych odpowiedzi, ze skalą> = 2.0, więc obejmuje iPhone'a 6+ i inne przyszłe urządzenia ze skalą wyższą niż Retina:
źródło
Aby połączyć odpowiedź z @sickp i następujący komentarz z @ n13, przekształciłem to w kategorię UIScreen, która wydaje się ładnie działać. Sprawdzanie jest wykonywane przy pierwszym połączeniu, a następnie zapisywane do późniejszych połączeń.
Może być komuś przydatny.
źródło
(Util)
zamiast(RetinaCheck)
... być może mniej zrozumiałym, ale nadaje się do innych zastosowań. Nazwałbym też metodęisRetinaDisplay
lub coś, co zaczyna się odis
, ale może nigdy nie zrozumiałem wytycznych dla Obj-C. Poza tym jestem fanem,> 1.0
ale kto wie, co będzie sensowne, iść naprzód.źródło
Spróbuj tego
źródło
Zmodyfikowana wersja Primulaveris dla uproszczenia najczęściej spotykanych przypadków użycia. Jestem na szybkim 2.2, ale to nie powinno mieć znaczenia.
Następnie po prostu użyj ich w ten sposób
źródło
To zadziałało dla mnie
źródło