4

現在、拡張スプラッシュ スクリーンをアプリに追加しようとしています。このスプラッシュ スクリーンは、RSS フィードのダウンロードが完了し、そのフィードで有効な高解像度画像を見つけてサムネイルを作成すると自動的に削除されます (アプリの最初の起動時に、この5 秒以上かかる場合があり、ユーザーには空白の画面が表示されます)。

残念ながら、MSDN 拡張スプラッシュ スクリーンの例は、入れ子になったさまざまな関数が完了するのを待つのではなく、ボタンを押すことでスプラッシュ スクリーンを閉じるため、あまり役に立ちませんでした。私が見つけた他の例では、アプリのプログラミングに比較的慣れていない人には役に立たない重要な詳細をスキップしています。

app.onactivated = function (args) {
    if (args.detail.kind === activation.ActivationKind.launch) {
        if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) {
            // TODO: This application has been newly launched. Initialize
            // your application here.
        } else {
            // TODO: This application has been reactivated from suspension.
            // Restore application state here.
        }

        performSetupTasks();
        // Retrieve splash screen object.
        var splash = args.detail.splashScreen;
        // Display the extended splash screen.
        displayExtendedSplash(splash);

        args.setPromise(WinJS.UI.processAll().then(removeExtendedSplash()));            
    }
};

代わりに、上記のコードは拡張スプラッシュ スクリーンをすぐに削除します。不完全であると報告するコードに何かを追加する必要がありperformSetupTasks()ますか?

4

2 に答える 2

0

アプリケーションに移動する前にスプラッシュ画面の表示を一時停止するスクリプト…</p>

1.) " app.onactivated = function (args) { if (args.detail.kind === activation.ActivationKind.launch) { " の後に default.js に以下のコードを追加します

    pauseDisplayOfSplashScreen(2500);

2.) app.oncheckpoint = function (args) の上に、次の関数を追加します。

    function pauseDisplayOfSplashScreen(milliseconds) {
    milliseconds += new Date().getTime();
    while (new Date() < milliseconds) { }
}

明確に理解できるように、default.js で動作する完全なスプラッシュ スクリーンの一時停止を次に示します。

   // For an introduction to the Blank template, see the following documentation:
   // http://go.microsoft.com/fwlink/?LinkId=232509
  (function () {
    "use strict";

     WinJS.Binding.optimizeBindingReferences = true;

      var app = WinJS.Application;
      var activation = Windows.ApplicationModel.Activation;

app.onactivated = function (args) {
    if (args.detail.kind === activation.ActivationKind.launch) {

        //pause for two seconds
        pauseDisplayOfSplashScreen(2500);

        if (args.detail.previousExecutionState !==   activation.ApplicationExecutionState.terminated) {
            // TODO: This application has been newly launched. Initialize
            // your application here.
        } else {
            // TODO: This application has been reactivated from suspension.
            // Restore application state here.
        }
        args.setPromise(WinJS.UI.processAll());
    }
};


function pauseDisplayOfSplashScreen(milliseconds) {
    milliseconds += new Date().getTime();
    while (new Date() < milliseconds) { }
}
app.oncheckpoint = function (args) {
    // TODO: This application is about to be suspended. Save any state
    // that needs to persist across suspensions here. You might use the
    // WinJS.Application.sessionState object, which is automatically
    // saved and restored across suspension. If you need to complete an
    // asynchronous operation before your application is suspended, call
    // args.setPromise().


};

app.start();

 })();

これで問題が解決することを願っています:)

于 2012-12-01T21:06:14.040 に答える