Qualcuno sa se c'è un modo per ottenere la densità dello schermo (ppi) del dispositivo in fase di esecuzione? Sarebbe bello non dover codificare le diverse densità nel caso in cui Apple lo cambi in futuro ...Ottieni ppi di iPhone/iPad/iPod Touch a runtime
risposta
Sono stato a caccia di questo troppo a lungo, e non sembra esserci un modo semplice per ottenere il dpi. Tuttavia, la documentazione per UIScreen dice che un punto non graduato è circa uguale a 1/60 di pollice.
Quindi, in sostanza, se si desidera che il dpi, è possibile moltiplicare la scala da 160.
float scale = 1;
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
scale = [[UIScreen mainScreen] scale];
}
float dpi = 160 * scale;
(L'istruzione if con respondsToSelector è quello di mantenere il codice di lavoro per le versioni precedenti di iOS che non hanno che la proprietà disponibili)
Secondo Wikipedia, l'iPhone è 163 dpi, un iPhone con un display retina è 326, e l'iPad è 132. Quindi dpi dell'iPad non è particolarmente accurata utilizzando questa formula, anche se l'iPhone di è piuttosto buono. Se si desidera una maggiore precisione per i dispositivi noti, è possibile codificare il dpi per i dispositivi noti, con un rapporto 1/160 come riserva per qualsiasi cosa futura.
float scale = 1;
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
scale = [[UIScreen mainScreen] scale];
}
float dpi;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
dpi = 132 * scale;
} else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
dpi = 163 * scale;
} else {
dpi = 160 * scale;
}
Questo non è proprio l'ideale, e non mi dispiacerebbe vedere una soluzione migliore da solo, ma è il meglio che ho potuto trovare.
Prova https://github.com/lmirosevic/GBDeviceInfo
int ppi = [GBDeviceInfo deviceInfo].displayInfo.pixelsPerInch; // #> 326]
Funziona su iOS e OSX
anche quei valori ppi sono codificati in quel Kit. Se guardi il codice troverai '// 6 Plus @ [@ 7, @ 1]: @ [@ (GBDeviceModeliPhone6Plus), @" iPhone 6 Plus ", @ (GBDeviceDisplay5p5Inch), @ 401],' – ben
- 1. Android: Ottieni TargetSDKVersion in runtime
- 2. Ottieni l'elenco delle dipendenze runtime
- 3. Ottieni le coordinate di un evento touch su Android
- 4. Come trovare PPI programmaticamente con precisione
- 5. PPI :: Errore del documento o un nome di subroutine speciale?
- 6. Implementazione 3D touch/Force touch
- 7. Compilare estensione di codice C# a runtime
- 8. Creazione di classi C# a runtime
- 9. Debug di una dll collegata a runtime
- 10. carico codice Python a runtime
- 11. Variabile SSIS impostata a runtime
- 12. PPI o pixel o qualcos'altro per mediaquery su schermi HD?
- 13. iPhone Multi touch interattivo a CorePlot
- 14. C'è qualcosa come PPI o Perl :: Critic for C?
- 15. Touch ID Problema con Sandbox Acquisti
- 16. Ottieni la stringa di versione del progetto Cocoa Touch Framework in Swift
- 17. UINavigationBar Touch
- 18. Sencha Touch: elenco annidato all'interno di un pannello a schede
- 19. Continuo a ricevere 404 di Apple-touch-icon.png
- 20. Come impedire all'applicazione Ipod Touch di andare a dormire
- 21. get touch location di uicollectionviewcell
- 22. Ottieni istanza di Classe <T> [Token di tipo runtime]
- 23. Ottieni apiKey a firebase
- 24. Ottieni percorso a Documenti
- 25. Aggiunta classi entità dinamicamente a runtime
- 26. Come modificare Spring @Scheduled fixedDelay a runtime
- 27. Cambia barra delle applicazioni buttonicon a runtime
- 28. Aggiunge dinamicamente proprietà C# a Runtime
- 29. Trovare nuova classe Java a runtime
- 30. possiamo modificare il livello di registrazione di log4j a runtime
questo non funziona per iPad mini, che ha 163 dpi, ma è linguaggio iPad – AlexWien
@AlexWien Hai trovato una soluzione a questo problema? –
@ PhoenixX_2 sì, ma non esiste una soluzione perfetta funziona solo per tutti i mini iPad ancora noti. itvworks con l'ID della macchina. cerca qui "rileva iPad mini" – AlexWien