Apakah iOS SDK menyediakan cara mudah untuk memeriksa apakah currentDevice memiliki tampilan (retina) resolusi tinggi?
Cara terbaik yang saya temukan untuk melakukannya sekarang adalah:
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) {
// RETINA DISPLAY
}
ios
iphone
retina-display
uiscreen
Pierre Valade
sumber
sumber
Jawaban:
Untuk mendeteksi tampilan Retina dengan andal di semua perangkat iOS, Anda perlu memeriksa apakah perangkat itu menjalankan iOS4 + dan apakah
[UIScreen mainScreen].scale
propertinya sama dengan 2.0. Anda TIDAK BISA mengasumsikan perangkat menjalankan iOS4 + jikascale
properti ada, karena iPad 3.2 juga mengandung properti ini.Pada iPad yang menjalankan iOS3.2, skala akan mengembalikan 1.0 dalam mode 1x, dan 2.0 dalam mode 2x - meskipun kita tahu bahwa perangkat tidak mengandung layar Retina. Apple mengubah perilaku ini di iOS4.2 untuk iPad: ini mengembalikan 1.0 dalam mode 1x dan 2x. Anda dapat menguji ini sendiri di simulator.
Saya menguji
-displayLinkWithTarget:selector:
metode pada layar utama yang ada di iOS4.x tetapi tidak iOS3.2, dan kemudian memeriksa skala layar:sumber
[UIDevice currentDevice].systemVersion]
. Dalam hal iniNSString *currentSystemVersion = [[UIDevice currentDevice] systemVersion]; return [currentSystemVersion compare:version options:NSNumericSearch];
@ jawaban sickp benar. Untuk mempermudah, tambahkan baris ini ke file Shared.pch Anda:
Kemudian dalam file apa saja Anda bisa melakukan:
sumber
sumber
?1:0
? Bukankah itu hanya mengulangi apa yang sudah dihitung pada bagian boolean dari ekspresi?Berikut ini adalah ekstensi cepat yang berguna:
Pembaruan untuk Swift v5:
Pemakaian:
Asli:
Pemakaian:
sumber
Cuplikan ini ...
Akan kembali ... 0 untuk iPhone resolusi standar / iPod touch, 1 untuk iPhone retina, 2 untuk iPad resolusi standar, 3 untuk iPad retina.
sumber
SSToolkit memiliki metode yang melakukan ini:
http://sstoolk.it/documentation/Categories/UIScreen(SSToolkitAdditions).html
Ini digunakan dengan cara berikut:
sumber
Selalu terasa agak cerdik untuk membandingkan nilai floating-point untuk kesetaraan. Saya lebih suka pergi untuk keduanya
atau
sumber
isRetina = [UIScreen mainScreen].scale > 1.95
. Ini juga akan bermanfaat untuk ketahanan ketika @ 4x datang :)Ini adalah riff pada jawaban Matt MC di atas. Hanya sebuah kategori
UIScreen
.sumber
alreadyChecked
itu gratis, tapi tidak apa-apa.Versi cepat jawaban di atas, dengan skala> = 2.0 sehingga mencakup iPhone 6+ dan perangkat masa depan lainnya dengan skala lebih tinggi dari retina:
sumber
Hanya untuk menggabungkan jawaban dari @sickp dan komentar berikut dari @ n13, saya menjadikan ini sebagai kategori UIScreen yang tampaknya berfungsi dengan baik. Pemeriksaan dilakukan pertama kali Anda memanggilnya dan kemudian disimpan untuk panggilan selanjutnya.
Mungkin bermanfaat bagi seseorang.
sumber
(Util)
alih-alih(RetinaCheck)
... mungkin kurang jelas, tetapi cocok untuk penggunaan lain. Juga saya akan menyebutkan metodeisRetinaDisplay
atau sesuatu yang dimulai denganis
, tetapi mungkin saya tidak pernah mengerti pedoman untuk Obj-C. Juga, saya penggemar> 1.0
tetapi siapa yang tahu apa yang masuk akal bergerak maju.sumber
coba ini
sumber
Versi primulaveris yang dimodifikasi untuk kesederhanaan kasus penggunaan yang paling umum. Saya pada 2.2 cepat tapi itu tidak masalah.
Maka cukup gunakan mereka seperti ini
sumber
Ini berhasil untuk saya
sumber