2010-07-07 6 views
12

iPhone 응용 프로그램을 고해상도 그래픽으로 업그레이드하는 중이고 오래된 장치에 문제가 있습니다. 상황에 내 UITabBar 아이콘이 관련되어 있습니다. 보라 :고해상도 UITabBar 아이콘이 저해상도 화면에서 전체 크기로 표시됩니다.

alt text

상단의 스크린 샷이 정확 보인다. OS4를 실행하는 최신 세대 iPhone (새 화면)에서 캡처되었습니다. 그러나 두 번째 스크린 샷은 완전히 잘못되었습니다. 고해상도 아이콘이 100 % 크기로 표시되고 잘려 나옵니다. 두 번째 스크린 샷은 OS4를 실행하는 제 2 세대 iPod touch (이전 화면)에서 가져 왔습니다.

그래서 여기서는 정말 혼란 스럽습니다. 나는 애플의 문서를 읽고, 내가 아는 한 내가 필요한 모든 것을하고있다. 내 응용 프로그램 번들 내에서 나는라는 이름으로 이미지가 있습니다 [email protected]

  • 탭 featured.png
  • 탭 topics.png
  • [email protected] 인터페이스 빌더 내에서
  • (... 등)

, 내가 탭 표시 줄에 사용되는 ("@ 2 배"없이 파일 이름) 각 이미지의 저해상도 버전을 지정했습니다. iPhone 설명서를 올바르게 이해하면 장치가 화면 해상도를 자동으로 감지하여 가능한 경우 고해상도 버전을 표시해야합니다. 따라서 iPod touch가 디스플레이 해상도를 잘못 감지하고있는 것처럼 보입니다. 아마 내가 여기서 뭔가를 놓치고 있니?

도움이나 통찰력을 제공해 주시면 감사하겠습니다. 감사.

업데이트 1 :

지금까지 운.

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UITabBarItem *tab; 
    UIViewController *item; 

    tab = [[UITabBarItem alloc] initWithTitle:@"Featured" image:[UIImage imageNamed:@"tab-featured.png"] tag:0]; 
    item = [self.viewControllers objectAtIndex:0]; 
    item.tabBarItem = tab; 
    [tab release]; 

    tab = [[UITabBarItem alloc] initWithTitle:@"Topics" image:[UIImage imageNamed:@"tab-topics.png"] tag:1]; 
    item = [self.viewControllers objectAtIndex:1]; 
    item.tabBarItem = tab; 
    [tab release]; 

    tab = [[UITabBarItem alloc] initWithTitle:@"Video" image:[UIImage imageNamed:@"tab-video.png"] tag:2]; 
    item = [self.viewControllers objectAtIndex:2]; 
    item.tabBarItem = tab; 
    [tab release]; 

    tab = [[UITabBarItem alloc] initWithTitle:@"Experts" image:[UIImage imageNamed:@"tab-experts.png"] tag:3]; 
    item = [self.viewControllers objectAtIndex:3]; 
    item.tabBarItem = tab; 
    [tab release]; 

    tab = [[UITabBarItem alloc] initWithTitle:@"Events" image:[UIImage imageNamed:@"tab-events.png"] tag:4]; 
    item = [self.viewControllers objectAtIndex:4]; 
    item.tabBarItem = tab; 
    [tab release]; 
} 

이 여전히 (탭 표시 줄에서 큰 컷 - 오프 아이콘) 상기와 같은 결과를 : 나는 내 UITabBarControllerviewDidLoad 명령에 다음과 같이 수동으로 착수했습니다 및 추가. 누구든지 고해상도 아이콘 쌍을 채우는 UITabBar 문제에 대해 들어 보셨습니까?

업데이트 2 :

제임스의 의견에 대해서 :

예, 나는이 문제를 해결 할 수 있었다. XCode에서 파일 참조에 오류가있는 것 같습니다. 아이디어가 부족하여 다시 롤백하고 모든 응용 프로그램을 저해상도 아트 워크로 다시 올바르게 표시하기 위해 모든 응용 프로그램에서 모든 2x 이미지를 제거하기 시작했습니다. 응용 프로그램이 적절한 크기의 이미지를 다시 표시하면 (저해상도 임에도 불구하고) 하나씩 하나씩 @ 2x 이미지를 다시 추가하기 시작합니다. 두 번째로 들어갔을 때 제대로 작동하는 것 같았습니다. 왜 또는 무슨 일이 일어 났는지 모릅니다. SDK는 어떤 일이 일어 났는지에 관해서 몇 개의 전선을 횡단 한 것처럼 보였습니다.

+0

이 문제를 해결할 수 있었습니까? 정확히 같은 방식으로 고해상도 이미지를 사용하여 iOS 3.1.3 장치에 내 응용 프로그램을 배포 할 때 어떤 이유로 응용 프로그램을 배포 할 때와 동일한 문제가 발생합니다. 3.1.3 장치는 고해상도 이미지를 사용하여 png 파일을 자르고 자릅니다. – James

+0

사람,이 버그는 쓰레기로 성가신입니다. Xcode의 인터페이스 빌더에서 동일한 결과를 얻었으며 애셋 제거/읽기를 통해 해결할 수있는 행운이 없었습니다. 매우 실망했습니다. [1 분 후] - 이제는 잘 작동합니다. – SmartyP

답변

4

내가 아는 한, 마법은 UIImage의 imageNamed:, imageWithContentsOfFile:initWithContentsOfFile: 방법입니다. "@ 2x"또는 파일 확장자가없는 NSString 리터럴 중 하나를 전달하면 장치에 적합한 파일 버전이 마술처럼 발견됩니다.

그 의미 중 하나는 탭 표시 줄 항목의 이미지를 프로그래밍 방식으로 설정해야한다는 것입니다. IB가 아직 장치 해상도에 따라 이미지를 동적으로 선택하는 펜촉을 쓸만큼 똑똑하지 않을 수 있습니다. 따라서 -viewDidLoad 방법으로 손으로 이미지를 설정해보십시오.

+0

답장을 보내 주셔서 감사합니다. 불행히도 여전히 트릭이 아닙니다. 나는이 스레드에 내 지속적인 노력을 게시 할 것입니다. – bigmac

+0

게시 한 코드가 표시됩니다. 파일 이름에서 ".png"를 남겨 두십시오. 내가 알기에,이 메소드들은 NSString 인자로 기본 이름을 취하고 선택적인 "@ 2x"와 파일 확장자로 일치하는 파일을 검색 할 것이다. –

0

.png 파일 확장명을 생략 해보십시오. 이렇게하면 OS가 저해상도 파일과 @ 2x 버전을 적절히 찾도록합니다. Apple의 "고해상도 지원 화면"개요에 설명되어 있습니다.

+0

나는 확장 기능을 제거하지 않고 일찍 시도했다. 이 문제를 바로 잡은 모든 이미지를 완전히 제거하고 다시 연결하기 전까지는 아니 었습니다. – bigmac

관련 문제