21

PhoneGap iOSアプリを更新して、iPhone5と互換性を持たせています。

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

iPhone 5をシミュレートする場合:アプリを起動すると、正しいスプラッシュ画面(Default-568h@2x.png)(ここでは「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を使用するようにアプリを更新することです。それが何らかの理由で不可能な場合は、以下に解決策を示します。

4

3 に答える 3

19

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

編集: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"に変更しました。これは私にとってトリックでした。– JoeDyndale2012年10月8日15:23

于 2012-09-18T20:54:01.967 に答える
1

この修正(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をハックすることによってほとんど違いに気づきません。

于 2012-10-04T19:27:28.490 に答える
0

ホワイトフリッカー

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

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

これが誰かに役立つことを願っています!

于 2013-08-16T16:48:01.930 に答える