di App iPhone Cara mendeteksi resolusi layar perangkat

130

Di Aplikasi iPhone, saat menjalankan Aplikasi di perangkat Bagaimana cara mendeteksi resolusi layar perangkat tempat Aplikasi berjalan?

ios
sumber

Jawaban:

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

Itu akan memberi Anda resolusi seluruh layar dalam poin, sehingga biasanya 320x480 untuk iPhone. Meskipun iPhone4 memiliki ukuran layar yang jauh lebih besar, iOS masih memberikan 320x480, bukan 640x960. Ini sebagian besar karena melanggar aplikasi yang lebih lama.

CGFloat screenScale = [[UIScreen mainScreen] scale];

Ini akan memberi Anda skala layar. Untuk semua perangkat yang tidak memiliki Tampilan Retina ini akan mengembalikan 1.0f, sedangkan perangkat Retina Display akan memberikan 2.0f dan iPhone 6 Plus (Retina HD) akan memberikan 3.0f.

Sekarang jika Anda ingin mendapatkan lebar piksel & tinggi layar perangkat iOS Anda hanya perlu melakukan satu hal sederhana.

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

Dengan mengalikan dengan skala layar Anda mendapatkan resolusi piksel yang sebenarnya.

Bacaan yang bagus tentang perbedaan antara titik dan piksel di iOS dapat dibaca di sini .

EDIT: (Versi untuk 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
sumber
4
Kecuali bahwa ini bukan resolusi 'pixel aktual' dalam kasus iPhone 6 Plus. Ini resolusi segala sesuatu yang diberikan pada (kecuali OpenGL) dalam kode, dengan skala 3x, tapi kemudian itu turun-sampel internal untuk resolusi asli layar itu 1080 x 1920. Salah satu dari banyak penjelasan yang baik di link di
RobP
Sayangnya, ini tidak akan memberi Anda dimensi elemen yang "benar" di layar, karena gagasan Apple tentang "titik" dan "skala" hanyalah perkiraan. (Lihat spesifikasi pada iPhone vs iPad vs iPad mini.) Agaknya untuk mengurangi jumlah kombinasi berbeda yang ada. Saya pikir iPhone 6 Plus sangat jauh.
ToolmakerSteve
Sebenarnya 6+ tidak terlalu jauh: tinggi 736 pts / 160 (pt / in) = 4,60 "tinggi logis; tinggi layar sebenarnya 4,79"; 5% kesalahan. iPad jauh lebih jauh: ketinggian 1024 pts / 160 (pt / in) = 6,40 "tinggi logis; tinggi layar aktual adalah 7,76"; 20% kesalahan. iPad mini OK; itu cocok dengan kepadatan iPhone asli. Untuk sebagian besar tujuan, ini berarti seseorang harus menguji perangkat lunak iPad pada iPad mini (untuk memastikan itu bisa digunakan), kemudian abaikan saja fakta bahwa sebagian besar iPad memperbesar gambar sebesar 20% (dibandingkan dengan iPhone atau iPad mini).
ToolmakerSteve
1
@RobP jadi bagaimana Anda mengatasi ini untuk iPhone 6 Plus?
Crashalot
1
@ Crashalot tidak yakin apa yang Anda maksud dengan 'selesaikan ini'? Itu tergantung pada tujuan yang ada dalam pikiran ketika Anda mendapatkan resolusi layar. Sejauh menyangkut programmer, jawaban Jman012 benar dan Anda merender ke dalam ruang 1242x2208 atau 2208x1242. Heck, itu bahkan resolusi yang kami berikan pada gambar peluncuran. Fakta bahwa perangkat keras kemudian mengambil sampel gambar ini dan menampilkannya pada layar fisik dengan jumlah piksel yang lebih kecil akan menjadi 'detail implementasi' kode kita bahkan seharusnya tidak disadari.
RobP
21

Kelas UIScreen memungkinkan Anda menemukan resolusi layar dalam Points and Pixels.

Resolusi layar diukur dalam Poin atau Piksel. Seharusnya tidak pernah bingung dengan ukuran layar. Ukuran layar yang lebih kecil dapat memiliki resolusi lebih tinggi.

'Bounds.width' UIScreen mengembalikan ukuran persegi panjang di Points masukkan deskripsi gambar di sini

'NativeBounds.width' UIScreen mengembalikan ukuran persegi panjang dalam Pixel. Nilai ini dideteksi sebagai PPI (Point per inch). Menunjukkan ketajaman & kejelasan Gambar pada perangkat. masukkan deskripsi gambar di sini

Anda dapat menggunakan kelas UIScreen untuk mendeteksi semua nilai ini.

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)")

Menghibur

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
sumber
8

Gunakan di App Delegate: Saya menggunakan 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
sumber
5

Untuk iOS 8 kita bisa menggunakan ini [UIScreen mainScreen].nativeBounds, seperti itu:

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

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

Lihat Referensi 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");
}
Konstantin
sumber
thanx untuk balasan jika saya memasukkannya ke NSLog (@ "% d", skala [[UIScreen mainScreen]]); ini memberikan 0 ...... dan NSLog (@ "% @", skala [[UIScreen mainScreen]]); itu memberi nil Pls beri tahu saya bagaimana cara mendapatkan resolusi layar atau bagaimana menguji apakah itu memberikan resolusi yang benar saat menjalankannya di simulator
ios
2
cobaNSLog(@"%f",[[UIScreen mainScreen] scale]);
vikingosegundo
0

Gunakan kode ini untuk membantu mendapatkan resolusi layar perangkat apa pun

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