2012-02-20 2 views
3

not/retina 디스플레이 테스트 용 크기가 100x100 인 UIView를 만들었습니다.iOS Retina display : images double size

나는이 개 이미지를 생성했습니다 : 을 - 일반 크기 (100 × 100) - 망막 크기 나는 두 가지 상황이 (200x200 크기)

: 1) 배경에서 비 레티 나 디스플레이 + 보통 크기의 이미지 2) 망막 디스플레이 + 망막 배경 이미지

첫 번째 시나리오는 정상입니다. 두 번째 시나리오에서 이미지는 두 배 크기이고 UIView에서는 총 이미지의 1/4 만 볼 수 있습니다.

if (IS_RETINA()) { 
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:IMG_NAVIGATION_BAR_BACKGROUND_RETINA] forBarMetrics:UIBarMetricsDefault]; 
} 
else { 
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:IMG_NAVIGATION_BAR_BACKGROUND] forBarMetrics:UIBarMetricsDefault]; 
} 

답변

36

이 할 수있는 더 쉬운 방법이있다 : 나는 다음과 같은 내 UIViewController에 탐색 모음에 배경 이미지를 할당 할 때

같은

발생합니다. 마지막에 "@ 2x"를 제외하고 이미지의 망막 버전에 비 망막 버전과 동일한 이름을 지정하십시오. 예를 들어 일반 이미지의 이름이 foo.png 인 경우 망막 버전의 이름은 [email protected]이어야합니다.

그런 다음 파일 이름의 일반 버전 (예 : foo.png)을 항상 참조하십시오. 앱이 망막이 아닌 하드웨어에서 실행될 때 일반 이미지가 사용되지만 망막 하드웨어를 사용할 때마다 고해상도 이미지가 자동으로 사용됩니다. 사용하는 모든 이미지에 대해 if 문을 작성하는 것보다 쉽습니다. 실제로 작동합니다.

+1

오타를 만들었습니다 ([email protected]). – coverback

+0

좋은 캐치, 고마워. – yuji

+1

명확히하기 위해 OP의 문제는 "망막"이미지가 여전히 '1'의 눈금으로 생성되므로 흐릿 해지고 왼쪽 상단 사분면 만 표시된다는 것입니다. –

2

IS_RETINA 테스트를 코딩 할 필요가 없습니다. 망막 디스플레이에 사용할 이미지가 포함 된 파일 이름에 @ 2x 접미어를 추가하기 만하면 iOS가이를 자동으로 사용합니다.

번들이 이미지 파일, prettyNavBarBackground.png 및 [email protected]

다음
#define IMG_NAVIGATION_BAR_BACKGROUND prettyNavBarBackground 

당신은 단지이 하나의 전화를 사용할 수 있으며, 아이폰 OS는 적절한 옵션

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:IMG_NAVIGATION_BAR_BACKGROUND] forBarMetrics:UIBarMetricsDefault]; 
+0

@ 2x 자동 연산은 코드를 사용하거나 IB로 이미지를 할당 할 때만 작동합니까? – Bagbyte

+0

@ user915829 : 코드도 있습니다. 그냥 시도해보십시오. 프로젝트에 foo.png 및 [email protected]의 모든 변형을 포함시켜야합니다. 그러나 코드에서 foo.png 만 참조하면 다른 모든 것은 자동으로 발생합니다. –

+0

예, 코드 또는 IB - 각 이미지에 대해 iOS가 찾을 수있는 최상의 것을 사용합니다. – Snips

0

U 돈을 선택합니다 망막과 정상적인 하드웨어를 구분할 수있는 코드를 작성해야합니다. U는 단지 "@ 2x"이미지를 추가해야합니다. 이것은 완벽하게 작동합니다.

U 이러한 이미지를 개별적으로 호출 할 필요는 없지만 파일 이름을 작성하십시오.