2010-07-07 6 views
0

내 iPhone/iPad 앱에서 화면 크기를 가져 오려고 할 때 이상한 문제가 발생합니다.범용 앱의 디스플레이 크기를 픽셀 단위로 찾는 안전한 방법이 있습니까?

처음

[[UIScreen mainScreen] 경계]

을 사용했다하지만 아이폰 4 (적어도 시뮬레이터)에 대한 올바른 크기를 반환하지 않는, 그냥 모든 아이폰에 대한 320 × 480을 반환

그럼 제가

변경

CGSize 화면 크기 = mainscr.currentMode.size;

그리고 그것은 모든 애플 기기에 대한 시뮬레이터에서 작동하지만 아이폰 3GS 장치에이 줄을 실행할 때 프로그램이 장치는 어떻게 얻는 3.1.2

어떤 생각을 실행

SIGABRT와 함께 종료 디스플레이의 픽셀 치수는 안전한 방법으로 표시합니까?

답변

3

UIScreen.currentMode는 < 3.2에서 사용할 수 없습니다, 그래서 당신은 -respondsToSelector:

CGSize screenSize; 
if ([mainscr respondsToSelector:@selector(currentMode)]) 
    screenSize = mainscr.currentMode.size; 
else 
    screenSize = mainscr.bounds.size; 

를 확인해야 당신이 -respondsToSelector: 확인 것을 사용하는 경우 마찬가지로, UIScreen.scale는 < 4.0에서 사용할 수 없습니다.

CGFloat scale = [mainscr respondsToSelector:@selector(scale)] ? mainscr.scale : 1.0f; 
+0

우수함, 완벽하게 작동합니다! 고맙습니다 :) – sinsro

3

[[UIScreen mainScreen] 경계]하지 픽셀에서 에 값을 반환하지만 당신은 픽셀의 해상도를 변환하는 스케일 매개 변수를 사용할 수 있습니다.

+0

[UIScreen mainScreen] .scale의 값을 확인한다고 가정합니다. 음, 이것이 3.1.2가있는 장치에서 작동하지 않는 것 같아서, 첫 번째 접근 방식과 마찬가지로 SIGABRT를 얻습니다. 이것이 진정한 장치 안전을 위해서, 어떤 장치/OS에서 실행되고 있는지에 상관없이 해상도를 감지 할 수있는 방법이 필요합니다 ... – sinsro

0

올바른 방법은 화면 해상도가 320x480이지만 디스플레이 스케일은 2.0입니다. 미래에 '기타'사과 장치가 다른 디스플레이 스케일이있을 것이다 가능성이 높다 실현 .. 예를 들어 1.5의 규모를 가진 새 아이 패드 언젠가 상상 ...

if([[UIScreen mainScreen] respondsToSelector:@selector"scale"]) { 
     displayScale = [[UIScreen mainScreen] scale]; } 

을 그들이 이런 짓을하는 이유를 모든 기기에서 작동하는 앱을 쉽게 작성할 수 있도록하는 것입니다. 화면에 100,100의 물체를 놓을 수 있으며 두 장치의 같은 위치에 있습니다. @ 2x 이름 지정 방법을 사용하여 두 세트의 이미지를 제공합니다 (하나는 1x 스케일, 다른 하나는 2x 스케일).

관련 문제