web-dev-qa-db-ja.com

iPhone5のスプラッシュスクリーンが正しく表示されない-Phonegap

PhoneGapiOSアプリをiPhone5と互換性があるように更新しています。

アプリが初期化された後、手動でスプラッシュ画面を非表示にしています。

IPhone 5をシミュレートする場合:アプリを起動すると、正しいスプラッシュ画面(デフォルト[email protected])(ここでは「5」)が表示されますが、すぐに非表示になり、代わりにiPhone 4のスプラッシュ画面(ここでは「4」)が表示されます。 。 4はアプリ全体をカバーしていないため、アプリの初期化の上部と下部のバーが表示されます。

それがどのように機能するかは完全にはわかりませんが、2つのシナリオが考えられます:1)両方の画像が同時に表示されますが、何らかの理由で、アプリからの呼び出しが非表示になるのを4が待機している間、5は自動的に非表示になります。 2)スプラッシュ画面のphonegapを手動で非表示にすると、ある時点で「真の」スプラッシュ画面が「偽の」スプラッシュ画面に切り替わり、アプリからのjavascript呼び出しとphonegapがこの切り替え後に正しいものを表示しない場合があります。

他の誰かがこれに遭遇および/または解決しましたか?

更新:すべてのスプラッシュ画像を再度削除および追加しようとしましたが、役に立ちませんでした。小さい画像(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を使用するようにアプリを更新することです。それが何らかの理由で不可能な場合は、以下に解決策を示します。

21
Hessius

他の場所で2つの回答を受け取りましたが、まだテストする時間がありません: Phonegap GoogleグループのユーザーT123から :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];

}

そして、上記でコメントしたBrionから、次のプルリクエストがCordova 2.2.0に組み込まれることを願っています:---(https://github.com/Apache/incubator-cordova-ios/pull/5

編集:T123のソリューションを試してみましたが、うまくいきました! EDIT2:Brionの修正はCordova 2.2.0に組み込まれ、現在リリースされています!

EDIT3:コメントをわざわざ読んでいない人のためにコメントを強調するために更新するだけです:

Phonegapバージョン1.4.1の場合、Hessiusの修正を次のように機能させることができました。メソッドshowSplashScreen、isIPad、resolveImageResource、および定義#definedegreesToRadian(x)(M_PI *(x)/ 180.0)をファイルPGViewControllerからコピーしました。 mをMainViewController.mファイルに追加します。その後、XCodeは読み取り専用属性に値を割り当てていると文句を言ったので、PhoneGap.frameworkのヘッダーファイルを編集して、これら2つの属性を読み取り/書き込み可能にしました。また、launchImageFileをHessiusのコードから@ "Default"に変更しました。これは私にとってトリックでした。 – Joe Dyndale 2012年10月8日15:23

19
Hessius

これに対する修正(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];   
}   

これにより、iPhone5のshowSplashScreenが無効になり、PhoneGapによって追加された短い起動イメージが回避されます(iOSの最初の起動イメージは正常に表示されます)。それは私にとってはうまくいきました、そして私はiPhone5用のshowSplashScreenをハックすることによってほとんど違いに気づきません。

1
Yuankai Ge

ホワイトフリッカー

私はCordova2.2でも同じ問題を抱えていました。スプラッシュ画面を正しくレンダリングするために、追加の手順を実行する必要があったことは言及する価値があると思います。

@Hessiusの回答に含まれている変更を加えました。しかし、スプラッシュ画面が表示された後、白い画面のフラッシュが生成されることに気づきました。

(void)showSplashScreenメソッドでは、他の人が見る可能性があります

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";
 //        }
}

コメントしたコードをコメントアウト(または削除)すると、アプリの読み込みと起動画面の間に表示されていた白いちらつきがなくなりました。

これが誰かを助けることを願っています!

0
WiseGuy