iPhone 5 splashscreen не отображается правильно-Phonegap
Я обновляю свое приложение PhoneGap iOS, чтобы сделать его совместимым с iPhone 5.
Я вручную скрываю заставку после инициализации моего приложения.
При моделировании iPhone 5: при запуске приложения отображается правильный экран-заставка ([email protected]) (здесь "5"), но быстро скрывает его и вместо этого отображает заставку iPhone 4 (здесь "4"). 4 не охватывает все приложение, таким образом, показывая верхнюю и нижнюю полосы инициализации приложения.
Я не такой. совершенно уверен, как это работает, но я могу придумать два возможных сценария:
1) оба изображения отображаются одновременно, но по какой-то причине 5 автоматически скрывается, в то время как 4 ждет вызова из приложения, чтобы скрыть.
2) в какой-то момент при отключении ручного скрытия экрана-заставки phonegap переключает "истинный" splashscreen на "поддельный", который отображается до вызова javascript из приложения, и phonegap просто не может отображать правильный после этого switcheroo.
Есть еще кто-нибудь столкнулись и / или решили эту проблему?
Обновление:
Попробовал удалить и добавить все изображения всплеска снова, но безрезультатно. Я попытался удалить меньшие изображения (4 и его не сетчатую версию), но даже без меньших изображений, присутствующих в любом месте проекта, я получаю ту же ошибку!
Обновление 2:
Cordova 2.2.0 теперь была выпущена, таким образом, исправляя эту проблему в соответствии с: http://shazronatadobe.wordpress.com/2012/10/27/whats-new-in-cordova-ios-2-2-0/
Итак, рекомендуемая поэтому решение будет состоять в обновлении вашего приложения для использования Cordova 2.2.0, если это по какой-то причине невозможно, решения представлены ниже.
3 ответов:
Я получил два ответа в другом месте, но у меня еще не было времени проверить их: от пользователя T123 в группе Phonegap Google : открыть Экземпляраcdvviewcontroller.m -- find - (void) showSplashScreen
Изменение о строке: 690
Откуда:
else // not iPad { orientedLaunchImageFile = launchImageFile; }Кому:
else // not iPad { orientedLaunchImageFile = launchImageFile; /* Edited for 4-inch IP5 */ if(screenBounds.size.height == 568) orientedLaunchImageFile = [NSString stringWithFormat:@"%@-568h", launchImageFile]; }И от Бриона, который прокомментировал выше, следующий запрос на вытягивание, который должен быть включен в Cordova 2.2.0: https://github.com/apache/incubator-cordova-ios/pull/50
Правка: попробовал Решение T123, и оно работает на меня! EDIT2: исправление Бриона было включено в Cordova 2.2.0, которая теперь была выпущена!
EDIT3: просто обновляю, чтобы выделить комментарий для тех, кто не утруждает себя их чтением:
Для Phonegap версии 1.4.1 мне удалось заставить исправление Гессиуса работать следующим образом: я скопировал методы showSplashScreen, isIPad, resolveImageResource и определение #define degreesToRadian(x) (M_PI * (x) / 180.0) из файла PGViewController.м к моему MainViewController.файл м. После этого XCode пожаловался, что я присваиваю значения атрибутам только для чтения, поэтому я отредактировал файл заголовка в PhoneGap.основы этих двух атрибутов записи. Я также изменил launchimagefilef из кода Гессиуса на @ "Default". Это сыграло со мной злую шутку. - Джо Диндейл 8 '12 октября в 15: 23
Исправление для этого (https://issues.apache.org/jira/browse/CB-1482) не выходит до 2.2. Это очень рискованно использовать нестабильную версию, и я не утруждаю себя компиляцией из исходного кода, поэтому я попробовал следующий хак:
В MainViewController.m
- (void) showSplashScreen { CGRect screenBounds = [[UIScreen mainScreen] bounds]; // HACK: PhoneGap pre-2.2 does not support iphone5 splash image well, so we just skip it if (screenBounds.size.height == 568) { return; } [super showSplashScreen]; }Это отключит showSplashScreen для iPhone5, чтобы избежать более короткого изображения запуска, добавленного PhoneGap (начальное изображение запуска iOS отображается нормально). Это сработало для меня, и я почти не замечаю разницы, отрубая showSplashScreen для iPhone5.
Белое Мерцание
У меня была такая же проблема с Cordova 2.2. Я думаю, стоит упомянуть, что мне пришлось сделать дополнительный шаг, чтобы заставить экран-заставку отрисовываться правильно.
Я внес изменения, которые были включены в ответ @Hessius. Но я заметил, что после появления заставки на экране появилась белая вспышка.
В методе showSplashScreen (void)другие могут видеть
if (launchImageFile == nil) { // fallback if no launch image was specified // if (CDV_IsIPhone5()) { // // iPhone 5 or iPod Touch 6th-gen // launchImageFile = @"Default-568h"; // } else { launchImageFile = @"Default"; // } }Комментируя код(или удаляя), который у меня есть прокомментировал, устранил белое мерцание, которое я видел между загрузкой приложения и стартовым экраном.
Надеюсь, это кому-то поможет!
Comments