2012-12-22 110 views
1

嗨,我需要获得屏幕宽度和高度。 我用这种方式在iphone中获取屏幕分辨率

UIWindow* window = [UIApplication sharedApplication].keyWindow; 
NSLog(@"%f",window.frame.size.width); 
NSLog(@"%f",window.frame.size.height); 

的问题是我有一个iPhone 4,但分辨率显示分辨率480x320这是不正确......

+2

你应该说明你想要的像素和不是点的屏幕尺寸(假设这是你真正想要的)。 – rmaddy

回答

7
float scaleFactor = [[UIScreen mainScreen] scale]; 
CGRect screen = [[UIScreen mainScreen] bounds]; 
CGFloat widthInPixel = screen.size.width * scaleFactor; 
CGFloat heightInPixel = screen.size.height * scaleFactor; 

关于分辨率480x320的屏幕分辨率,这是绝对正确的,因为这让你的逻辑大小,也可以以点为480点×320点说大小。

点与像素之间存在差异。 Pixel是显示的最小单位。

其中Point是像素的集合。

在iPhone 4 1点= 2像素
的情况下在iPhone 3GS 1点= 1个像素

请参考docs for scale and bounds的情况下。

bounds包含屏幕的边界矩形,以点为单位。
scale该值反映了从默认逻辑坐标空间转换到此屏幕的设备坐标空间所需的比例因子。默认的逻辑坐标空间是使用点来测量的,其中一个点大约等于1/160英寸。如果设备的屏幕具有相当相似的像素密度,则比例因子通常设置为1.0,以便一个点映射到一个像素。但是,具有明显不同像素密度的屏幕可能会将此属性设置为更高的值。

1

如果您需要在屏幕的高度和宽度使用此:

CGRect screenRect = [[UIScreen mainScreen] bounds]; 
CGFloat screenWidth = screenRect.size.width; 
CGFloat screenHeight = screenRect.size.height; 
+0

这与OP经历的问题相同。 CoreGraphics以点为单位,而不是像素。请阅读文档。 – 2012-12-22 15:33:26

1
CGRect screen = [[UIScreen mainScreen] bounds]; 
CGFloat width = CGRectGetWidth(screen); 
CGFloat height = CGRectGetHeight(screen); 
+0

这也是不正确的。 – 2012-12-22 15:36:21

3

你必须在屏幕的规模倍增:

CGSize sz = [UIScreen mainScreen].bounds.size; 
float sc = [UIScreen mainScreen].scale; 
size_t w = sz.width * sc; 
size_t h = sz.height * sc; 
2

您需要获取屏幕的比​​例,并将其乘以宽度和高度。例如: -

UIWindow* window = [UIApplication sharedApplication].keyWindow; 
UIScreen *screen = window.screen; 
CGFloat scale = screen.scale; 

NSLog(@"%f",window.frame.size.width); 
NSLog(@"%f",window.frame.size.height); 
NSLog(@"screen pixels width: %f height: %f", window.frame.size.width * scale, window.frame.size.height * scale); 
0

你所需要的仅仅是这样的:[UIScreen mainScreen].nativeBounds,从iOS的8

-1

的API通过这个代码,你可以得到任何iphone的屏幕的高度和宽度,并根据需要使用它在你的应用程序。

[[UIScreen mainScreen] bounds].size.height 
[[UIScreen mainScreen] bounds].size.width 
+0

请解释你的代码。 – brimstone