UIScreen的scale屬性


A UIScreen object contains the bounding rectangle of the device’s entire screen. When setting up your application’s user interface, you should use the properties of this object to get the recommended frame rectangles for your application’s window.
UIScreen對象包含了整個屏幕的邊界矩形。當構造應用的用戶界面接口時,你應該使用該對象的屬性來獲得推薦的矩形大小,用以構造你的程序窗口。
以下列出的屬性和操作是我用過的。
       + mainScreen        Returns the screen object representing the device’s screen.
   bounds  property    Contains the bounding rectangle of the screen, measured in points. (read-only)
   applicationFrame  property  The frame rectangle for the app window. (read-only)
   scale  property   The natural scale factor associated with the screen. (read-only)
[plain]  
CGRect bound = [[UIScreen mainScreen] bounds];  // 返回的是帶有狀態欄的Rect  
CGRect frame = [[UIScreen mainScreen] applicationFrame];  // 返回的是不帶有狀態欄的Rect  
float scale = [[UIScreenmainScreen] scale]; // 得到設備的自然分辨率  
對於scale屬性需要做進一步的說明:
    以前的iphone 設備屏幕分辨率都是320*480,后來apple 在iPhone 4中采用了名為Retina的顯示技術,iPhone 4采用了960x640像素分辨率的顯示屏幕。由於屏幕大小沒有變,還是3.5英寸,分辨率的提升將iPhone 4的顯示分辨率提升至iPhone 3GS的四倍,每英寸的面積里有326個像素。
scale屬性的值有兩個:
scale = 1; 的時候是代表當前設備是320*480的分辨率(就是iphone4之前的設備)
scale = 2; 的時候是代表分辨率為640*960的分辨率
 
判斷屏幕類型:
[plain]  
// 判斷屏幕類型,普通還是視網膜  
    float scale = [[UIScreen mainScreen] scale];  
    if (scale == 1) {  
        bIsRetina = NO;  
        NSLog(@"普通屏幕");  
    }else if (scale == 2) {  
        bIsRetina = YES;  
        NSLog(@"視網膜屏幕");  
    }else{  
        NSLog(@"unknow screen mode !");  
    }  
對dpi和ppi的理解:
DPI是每英寸的點數,可以簡單理解為點的密度。
PPI是每英寸的像素數,可以簡單理解為像素密度。
點和像素有區別嗎?很多時候,一個點 = 一個像素。但是,並不盡然,如iPhone的視網膜屏幕,它一個點包含了四個像素,大大提高了顯示清晰度。
使用UIScreen獲取的bounds和frame,都是點的尺寸,而非像素尺寸。例如,在視網膜屏的iPhone4上,我獲取的applicationFrame大小是320x460,很明顯它代表的是點的數量。假如你要顯示一張圖,如果該圖原大小是100x200,那么顯示在這樣的屏幕上,它的實際顯示出來的尺寸將只有原來大小的一半,但它的像素數並未改變。更加需要考慮的是,如果你要對這張圖進行縮放,那么縮放率該按照實際顯示尺寸計算,還是按照實際像素數計算?這一塊很重要,曾走了不少彎路,答案是前者。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM