Вопрос по ios, ipad, ios5 – iOS 5.1 и Default.png

8

Я занимаюсь разработкой приложения для iOS 5.1 и испытываю странное поведение с файлами default.png.

Я добавил следующие файлы в свое приложение:

Default.png - (iPhone)

[email protected] - (iPhone Retina)

Default-Portrait~ipad.png - (iPad)

[email protected]~ipad.png -(iPad Retina)

При запуске приложения кажется, что оно выбирает правильное изображение Default.png для использования в каждом случае. Однако в моем AppDelegate у меня есть простой экран-заставка, чтобы облегчить загрузку приложения и переход к приложению, делая что-то вроде:

UIImageView *splashView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,window.frame.size.width, window.frame.size.height)]; 
splashView.image = [UIImage imageNamed:@"Default"]; 

[window addSubview:splashView]; 
[window bringSubviewToFront:splashView]; 

Тем не менее[UIImage imageNamed:@"Default"] в свою очередь не выбирает правильный файл для каждого устройства, и я считаю, что проблема заключается в-Portrait часть имени файла.

В качестве быстрого решения я сделал это:

if( ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) ) {
    // Force the image used by ipads
    if( [[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0) {
       splashView.image = [UIImage imageNamed:@"[email protected]~ipad"];
    }
    else {
        splashView.image = [UIImage imageNamed:@"Default-Portrait~ipad"];
    }
}
else
   splashView.image = [UIImage imageNamed:@"Default"];

Это то, как я должен это делать? Это выглядит смешно для вас?

Это выглядит смешно для вас? это смешно Krishnabhadra
Попробуйте NSLogging, чтобы увидеть, что именно происходит. Rok Jarc
Я говорил о NSLoging в ваших ветках if / else, где вы определяете имена файлов. Теперь я вижу, что я неправильно понял ваш вопрос. Скоро напишу ответ. Rok Jarc
@rokjarc Как вы можете NSLog, какой файл выбирается SDK, когда вы делаете простой[UIImage imageNamed:@"Default"]? mobius

Ваш Ответ

3   ответа
0

http://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/App-RelatedResources/App-RelatedResources.html

<basename><usage_specific_modifiers><scale_modifier><device_modifier>.png

Providing Launch Images for Different Orientations
<basename><orientation_modifier><scale_modifier><device_modifier>.png

Providing Launch Images for Custom URL Schemes
<basename>-<url_scheme><scale_modifier><device_modifier>.png
4

Ресурсы, связанные с приложением

Для запуска изображений используйте этот формат:

<basename><orientation_modifier><scale_modifier><device_modifier>.png

Похоже, вам лучше использовать:

Default.png - (iPad)

[email protected] - (iPad Retina)

Default~iphone.png - (iPhone)

[email protected]~iphone.png -(iPhone Retina)

Это должно дать вам правильное изображение, даже если использовать просто:

splashView.image = [UIImage imageNamed:@"Default"]; 
-[UIImage imageNamed:] не работает - как подчеркнул @mobius, проблема в модификаторе ориентации. Поэтому что-то вроде Default ~ ipad.png будет работать, но Default-Portrait ~ ipad.png не работает с-[UIImage imageNamed:] (даже при том, что во время запуска iPad действительно выбирает правильное изображение).
2

как мое приложение Universal загрузилось, я отображаю копию экрана запуска вUIImageView а затем исчезнуть, чтобы дать мягкий переход между запуском и готовым приложением. Вот код, который я использую, чтобы определить, какое изображение использовать:

    // choose the correct launch image for orientation, device and scale
    NSMutableString *launchImageName = [[NSMutableString alloc] initWithString:@"Default"];
    BOOL isPad = ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad );
    if( isPad )
    {
        BOOL isLandscape = UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]);
        NSString *imageOrientation = (isLandscape) ? @"Landscape" : @"Portrait";

        BOOL isRetina = ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0);
        NSString *scaleString = (isRetina) ? @"@2x" : @"";

        // Default-Landscape~ipad.png
        // [email protected]~ipad.png
        // Default-Portrait~ipad.png
        // [email protected]~ipad.png
        launchImageName = [NSMutableString stringWithFormat:@"%@-%@%@~ipad.png", launchImageName, imageOrientation, scaleString ];

    } else {

        if( CGRectGetHeight(self.view.frame) > 480.f)
        {
            // Default-568h.png
            launchImageName = [NSMutableString stringWithFormat:@"%@-568h.png", launchImageName];
        } else {
            // Default.png
            // [email protected]
            launchImageName = [NSMutableString stringWithFormat:@"%@.png", launchImageName];
        }
    }
    UIImage *launchImage = [UIImage imageNamed:launchImageName];

Похожие вопросы