O SDK do iOS fornece uma maneira fácil de verificar se o dispositivo atual possui uma tela de alta resolução (retina)?
A melhor maneira que encontrei para fazer isso agora é:
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) {
// RETINA DISPLAY
}
ios
iphone
retina-display
uiscreen
Pierre Valade
fonte
fonte
Respostas:
Para detectar a exibição Retina de maneira confiável em todos os dispositivos iOS, é necessário verificar se o dispositivo está executando o iOS4 + e se a
[UIScreen mainScreen].scale
propriedade é igual a 2.0. Você NÃO PODE assumir que um dispositivo está executando o iOS4 + se ascale
propriedade existir, pois o iPad 3.2 também contém essa propriedade.Em um iPad executando o iOS3.2, a escala retornará 1.0 no modo 1x e 2.0 no modo 2x - mesmo sabendo que o dispositivo não contém uma tela Retina. A Apple alterou esse comportamento no iOS4.2 para o iPad: ele retorna 1.0 nos modos 1x e 2x. Você pode testar isso sozinho no simulador.
-displayLinkWithTarget:selector:
Testo o método na tela principal existente no iOS4.x, mas não no iOS3.2, e depois verifico a escala da tela:fonte
[UIDevice currentDevice].systemVersion]
. Nesse caso, seriaNSString *currentSystemVersion = [[UIDevice currentDevice] systemVersion]; return [currentSystemVersion compare:version options:NSNumericSearch];
A resposta de @ sickp está correta. Apenas para facilitar as coisas, adicione esta linha ao seu arquivo Shared.pch:
Em qualquer arquivo, você pode simplesmente fazer:
fonte
fonte
?1:0
? Isso não é apenas reiterar o que já foi calculado na parte booleana da expressão?Aqui está uma extensão rápida e prática:
Atualização para o Swift v5:
Uso:
Original:
Uso:
fonte
Este trecho ...
Retornará ... 0 para iPhone / iPod touch com resolução padrão, 1 para iPhone com retina, 2 para iPad com resolução padrão, 3 para iPad com retina.
fonte
O SSToolkit possui um método que faz isso:
http://sstoolk.it/documentation/Categories/UIScreen(SSToolkitAdditions).html
É usado da seguinte maneira:
fonte
Sempre é um pouco complicado comparar valores de ponto flutuante para igualdade. Eu prefiro ir para qualquer um
ou
fonte
isRetina = [UIScreen mainScreen].scale > 1.95
. Isso também terá a vantagem de ser resistente a quando @ 4x vem junto :)Este é um riff na resposta de Matt MC acima. Apenas uma categoria ativada
UIScreen
.fonte
alreadyChecked
seja gratuito, mas tudo bem.Versão rápida das respostas acima, com escala> = 2.0, para incluir o iPhone 6+ e outros dispositivos futuros com escala maior que a Retina:
fonte
Apenas para combinar a resposta de @sickp e o seguinte comentário de @ n13, eu fiz isso em uma categoria UIScreen que parece funcionar bem. A verificação é feita na primeira vez em que você liga e, em seguida, salva para chamadas posteriores.
Pode ser útil para alguém.
fonte
(Util)
vez de(RetinaCheck)
... talvez seja menos claro, mas se presta a outros usos. Também eu nomearia o métodoisRetinaDisplay
ou algo que começa comis
, mas talvez nunca tenha entendido as diretrizes do Obj-C. Além disso, sou fã,> 1.0
mas quem sabe o que fará sentido no futuro.fonte
tente isso
fonte
Versão modificada do primulaveris para simplificar os casos de uso mais comuns. Estou no veloz 2.2, mas isso não deve importar.
Em seguida, basta usá-los assim
fonte
Isso funcionou para mim
fonte