2011-08-29 3 views
1

고해상도 버전 (iOS)에서 일부 리소스의 저해상도 버전을 강제로로드하려고 할 때 많은 문제가있었습니다. 2x)도 존재합니다.@ 2x-version도있을 때 iOS에서 저해상도 리소스를 선택적으로로드합니다.

내가 원했던 이유는 간단합니다. 내 앱은 사용자에게 전체 화면 이미지 (예 : 오래된 기기에서는 320x480, Retina 기기에서는 640x960)를 보여 주며 사용자는 TwitPic에 일부를 업로드 할 수 있습니다. 장치에 관계없이 업로드 된 이미지를 320x480으로 통합하려고했습니다 (일관성 때문에 크기는 웹 브라우저에서 문제가 없기 때문에).

내가 사용한 UIImage 방법에 관계없이 리소스 파일의 고해상도 버전이 존재할 때 (전체 파일 경로를 전달하더라도)로드되었음을 알게되었습니다. UIImage는 당신을 능가 할 것입니다. 하지만 UMImage를 능가하는 방법을 찾았습니다.

- (UIImage*) lowResImage{ 

    NSString* path = [[NSBundle mainBundle] pathForResource:_fileName 
                ofType:@"png" 
               inDirectory:_resourceSubdirectory]; 

    path = [path stringByReplacingOccurrencesOfString:@"@@2x" withString:@""]; 

    NSData* imageData = [[NSData alloc] initWithContentsOfFile:path]; 

    UIImage* image = [[UIImage alloc] initWithData:imageData]; 
    [imageData release]; 

    return [image autorelease]; 
} 

위 코드는 4 세대 iPod touch에서 잘 작동합니다.

누구나 더 나은 방법을 생각해 냈습니다.

답변

2

경로를 작성하고 데이터를 연 다음 아래 예와 같이 데이터를 사용하여 이미지를 초기화하십시오.


    NSString *dataPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:_fileName]; 
    NSData *data = [[NSData alloc] initWithContentsOfFile:dataPath]; 
    UIImage *image3 = [UIImage imageWithData:data]; 
+0

더 짧습니다. 감사. 번들에 디렉토리 구조가 있고 일부 리소스가 하위 디렉토리 (즉, 루트가 아님)에있을 때 해당 코드가 작동하는지 궁금합니다. 나는 그것을해야만했다. 그렇지 않으면 "Default.png"로의 시작 애니메이션이 부드럽게 수행되지 않는다. (확대되지 않는다). –

관련 문제