no aplicativo para iPhone Como detectar a resolução da tela do dispositivo

130

No iPhone App, enquanto o aplicativo é executado no dispositivo Como detectar a resolução da tela do dispositivo no qual o aplicativo está sendo executado?

ios
fonte

Respostas:

349
CGRect screenBounds = [[UIScreen mainScreen] bounds];

Isso fornecerá a resolução da tela inteira em pontos, de modo que normalmente seria 320x480 para iPhones. Mesmo que o iPhone4 tenha um tamanho de tela muito maior, o iOS ainda devolve 320x480 em vez de 640x960. Isso ocorre principalmente devido à quebra de aplicativos mais antigos.

CGFloat screenScale = [[UIScreen mainScreen] scale];

Isso fornecerá a escala da tela. Para todos os dispositivos que não possuem Retina Displays, isso retornará 1,0f, enquanto os dispositivos Retina Display darão 2,0f e o iPhone 6 Plus (Retina HD) dará 3,0f.

Agora, se você deseja obter a largura e altura de pixel da tela do dispositivo iOS, basta fazer uma coisa simples.

CGSize screenSize = CGSizeMake(screenBounds.size.width * screenScale, screenBounds.size.height * screenScale);

Ao multiplicar pela escala da tela, você obtém a resolução real de pixels.

Uma boa leitura sobre a diferença entre pontos e pixels no iOS pode ser lida aqui .

EDIT: (Versão para Swift)

let screenBounds = UIScreen.main.bounds
let screenScale = UIScreen.main.scale
let screenSize = CGSize(width: screenBounds.size.width * screenScale, height: screenBounds.size.height * screenScale)
James Linnell
fonte
4
Só que essa não é a resolução de 'pixel real' no caso do iPhone 6 Plus. É a resolução de tudo é processado em (exceto OpenGL) em código, com uma escala de 3x, mas, em seguida, que é down-amostrados internamente para a resolução nativa do ecrã de 1080 x 1920. Uma das muitas explicações boas na ligação
RobP
Infelizmente, isso não fornecerá as dimensões "verdadeiras" dos elementos na tela, pois as noções de "pontos" e "escala" da Apple são apenas uma aproximação. (Veja as especificações no iPhone x iPad x iPad mini). Presumivelmente para reduzir o número de combinações diferentes existentes. Eu acho que o iPhone 6 Plus está particularmente distante.
Home
Na verdade, 6+ não muito longe: altura 736 pts / 160 (pt / in) = 4,60 "altura lógica; altura real da tela é 4,79"; Erro de 5%. O iPad está muito mais distante: altura 1024 pts / 160 (pt / in) = 6,40 "altura lógica; a altura real da tela é 7,76"; 20% de erro. o iPad mini está OK; corresponde à densidade original do iPhone. Para a maioria dos propósitos, isso significa que você deve testar o software do iPad no iPad mini (para garantir que seja utilizável) e simplesmente ignorar o fato de que a maioria dos iPads amplia a imagem em 20% (em comparação com o iPhone ou iPad mini).
Página
1
@ RobP, então, como você resolve isso para o iPhone 6 Plus?
Crashalot
1
@Crashalot não sabe o que você quer dizer com 'resolver isso'? Depende do objetivo que você tem em mente ao obter a resolução da tela. No que diz respeito aos programadores, a resposta de Jman012 está correta e você transforma em um espaço de 1242x2208 ou 2208x1242. Heck, essa é mesmo a resolução em que fornecemos as imagens de lançamento. O fato de o hardware, em seguida, mostrar uma amostra dessa imagem e exibi-la em uma tela física com uma contagem menor de pixels, seria um 'detalhe de implementação' que nosso código nem deveria estar ciente.
RobP
21

A classe UIScreen permite encontrar a resolução da tela em Pontos e Pixels.

As resoluções de tela são medidas em pontos ou pixels. Nunca deve ser confundido com o tamanho da tela. Um tamanho de tela menor pode ter maior resolução.

'Bounds.width' do UIScreen retorna o tamanho retangular em Points insira a descrição da imagem aqui

O 'nativeBounds.width' do UIScreen retorna o tamanho retangular em Pixels. Esse valor é detectado como PPI (ponto por polegada). Mostra a nitidez e a clareza da imagem em um dispositivo. insira a descrição da imagem aqui

Você pode usar a classe UIScreen para detectar todos esses valores.

Swift3

// Normal Screen Bounds - Detect Screen size in Points.
let width = UIScreen.main.bounds.width
let height = UIScreen.main.bounds.height
print("\n width:\(width) \n height:\(height)")

// Native Bounds - Detect Screen size in Pixels.
let nWidth = UIScreen.main.nativeBounds.width
let nHeight = UIScreen.main.nativeBounds.height
print("\n Native Width:\(nWidth) \n Native Height:\(nHeight)")

Console

width:736.0 
height:414.0

Native Width:1080.0 
Native Height:1920.0

Swift 2.x

//Normal Bounds - Detect Screen size in Points.
    let width  = UIScreen.mainScreen.bounds.width
    let height = UIScreen.mainScreen.bounds.height

// Native Bounds - Detect Screen size in Pixels.
    let nWidth  = UIScreen.mainScreen.nativeBounds.width
    let nHeight = UIScreen.mainScreen.nativeBounds.height

ObjectiveC

// Normal Bounds - Detect Screen size in Points.
CGFloat *width  = [UIScreen mainScreen].bounds.size.width;
CGFloat *height = [UIScreen mainScreen].bounds.size.height;

// Native Bounds - Detect Screen size in Pixels.
CGFloat *width  = [UIScreen mainScreen].nativeBounds.size.width
CGFloat *height = [UIScreen mainScreen].nativeBounds.size.width
Taimur Ajmal
fonte
8

Use-o no App Delegate: estou usando o storyboard

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {

    CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size;

    //----------------HERE WE SETUP FOR IPHONE 4/4s/iPod----------------------

    if(iOSDeviceScreenSize.height == 480){          

        UIStoryboard *iPhone35Storyboard = [UIStoryboard storyboardWithName:@"iPhone" bundle:nil];

        // Instantiate the initial view controller object from the storyboard
        UIViewController *initialViewController = [iPhone35Storyboard instantiateInitialViewController];

        // Instantiate a UIWindow object and initialize it with the screen size of the iOS device
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

        // Set the initial view controller to be the root view controller of the window object
        self.window.rootViewController  = initialViewController;

        // Set the window object to be the key window and show it
        [self.window makeKeyAndVisible];

        iphone=@"4";

        NSLog(@"iPhone 4: %f", iOSDeviceScreenSize.height);

    }

    //----------------HERE WE SETUP FOR IPHONE 5----------------------

    if(iOSDeviceScreenSize.height == 568){

        // Instantiate a new storyboard object using the storyboard file named Storyboard_iPhone4
        UIStoryboard *iPhone4Storyboard = [UIStoryboard storyboardWithName:@"iPhone5" bundle:nil];

        // Instantiate the initial view controller object from the storyboard
        UIViewController *initialViewController = [iPhone4Storyboard instantiateInitialViewController];

        // Instantiate a UIWindow object and initialize it with the screen size of the iOS device
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

        // Set the initial view controller to be the root view controller of the window object
        self.window.rootViewController  = initialViewController;

        // Set the window object to be the key window and show it
        [self.window makeKeyAndVisible];

         NSLog(@"iPhone 5: %f", iOSDeviceScreenSize.height);
        iphone=@"5";
    }

} else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    // NSLog(@"wqweqe");
    storyboard = [UIStoryboard storyboardWithName:@"iPad" bundle:nil];

}

 return YES;
 }
ios_av
fonte
5

Para o iOS 8, podemos apenas usar isso [UIScreen mainScreen].nativeBounds, assim:

- (NSInteger)resolutionX
{
    return CGRectGetWidth([UIScreen mainScreen].nativeBounds);
}

- (NSInteger)resolutionY
{
    return CGRectGetHeight([UIScreen mainScreen].nativeBounds);
}
boog
fonte
4

Consulte a Referência do UIScreen: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIScreen_Class/Reference/UIScreen.html

if([[UIScreen mainScreen] respondsToSelector:NSSelectorFromString(@"scale")])
{
    if ([[UIScreen mainScreen] scale] < 1.1)
        NSLog(@"Standard Resolution Device");

    if ([[UIScreen mainScreen] scale] > 1.9)
        NSLog(@"High Resolution Device");
}
Constantin
fonte
obrigado por responder se eu estiver colocando no NSLog (@ "% d", [[UIScreen mainScreen] scale]); fornece 0 ...... e NSLog (@ "% @", [[UIScreen mainScreen] scale]); dá-nil Pls deixe-me saber como obter resolução de tela ou como testar se ele está dando correta resolução enquanto executá-lo no simulador
ios
2
tenteNSLog(@"%f",[[UIScreen mainScreen] scale]);
vikingosegundo 24/01
0

Use este código para ajudar a obter qualquer tipo de resolução de tela do dispositivo

 [[UIScreen mainScreen] bounds].size.height
 [[UIScreen mainScreen] bounds].size.width
Shahzaib Maqbool
fonte