web-dev-qa-db-ja.com

画像をアニメーション化できますかiOS8LaunchScreen.xib

質問:
iOS8.1以降にデプロイすることを目的としたXcode6プロジェクトのLaunchScreen.xibファイル内で何かをアニメーション化する方法はありますか?


コンテキスト:
ユーザーが待っている間、アクティビティを伝えたり、ユーザーの気を散らしたりするための簡単なアニメーションを作成したいと考えています...


例:

  • ローディングバー
  • 活動指標
  • アニメーションGIF
  • UIImageを画面上で移動します
  • 画像を回転させる
14
JThora

いいえ。

起動イメージは、ユーザーがアプリの起動を選択してからアプリが実際に実行を開始するまでの期間にのみ表示されます。この期間中、アプリはアニメーションの実行などのアクションを実行できません。アプリはまだ実行されていません。 Launch Imageは単なる静止画像であり、適切に設計されていると、アプリの準備ができているという印象をユーザーに与えるのに役立ちます。

(一部の開発者は HIG を無視し、起動画像を使用してスプラッシュ画面を提供します。アニメーション表示の場合もあります。ただし、その場合、起動画面は静止画像のままであり、アニメーションはアプリの実行が開始されます—実行中のアプリによって描画されたアニメーションの最初のフレームが静的な起動画像の外観と一致するだけです。)

この動作はiOS8のLaunchScreen.xib機能では変更されませんでした—アプリが実際に実行される前にのみ表示されるため、静的なままです画像。 LaunchScreen.xib機能により得られるのは、サイズや向きなどごとに異なる画像をアプリバンドルで個別に設計、レンダリング、出荷することなく、さまざまなデバイスサイズやスタイルの起動画像を適応的に生成する機能です。

アプリが制御を取得するまでに実際に使用する準備ができていない場合は、その時点で実行している「読み込み」タスクを本当にすぐに実行する必要があるのか​​、それともユーザーに何かを開始させることができるのかを検討してください。すぐにバックグラウンドスレッドでさらにセットアップ作業を行うか、実際に必要になるまで延期します。

26
rickster

スプラッシュスクリーンはあまり使用しませんが、使用するときは本のように開いてもらいたいです。

実のところ、私はスプラッシュスクリーンの大ファンではなく、Appleは、アプリケーションのコントロール(テキストなし)を表示するdefault.pngを使用することをお勧めします。

アプリケーションの最初の画面によく似た起動画像を表示します。この方法により、アプリケーションの起動時間が短くなります。

[バージョン情報]ウィンドウやスプラッシュ画面を表示しないでください。一般に、ユーザーがアプリケーションをすぐに使用できないような種類のスタートアップエクスペリエンスを提供しないようにしてください。

hIGガイドラインから

ただし、一部の人々はそれらを愛しており、特に1つのアプリには素晴らしい実装スプラッシュ画面があります—パス2.0。 Pathを開くと、赤いバージョンのAppleリネンのテクスチャが、本のように開いた状態でアニメーション化されます(または、Pathが自分たちと見なしているジャーナル)のロゴが表示されます。

このプロジェクトのソースはここで入手できます: https://github.com/jaysonlane/OpenBook

始める前に、免責事項を付けてこれを始めましょう。私はココアのアニメーションに非常に慣れていないので、我慢してください。不要または非効率的なコードを見つけた場合は、コメントを残してください。整理します。

アニメーションをまだご覧になっていない場合は、アプリストアにアクセスしてコピーを入手し、私たちが達成しようとしていることを確認してください。巧妙にタイトルが付けられた数学を使用できるデフォルトのpngを作成しました(開く数学の本のように)。これはここ(網膜)とここからダウンロードできます。

まず、これから行うことの背後にある「トリック」について説明します。通常のデフォルトのスプラッシュシステムを使用して、default.pngを表示します。 App Delegateでは、アプリケーションの起動が完了したら、同じdefault.pngのビューの上にUIImageViewを作成します。次に、そのUIImageViewをアニメーション化して開き、回転してビューを表示します。

じゃ、行こう:

新しいプロジェクトを作成します。単一のビューテンプレートを使用してプロジェクトを作成しましたが、これはどのようなものでも機能します。先に進み、default.pngと[email protected]を提供された画像に設定します。これを行うには、左側のナビゲーションペインでプロジェクトをクリックし、[ターゲット]をクリックして、下にスクロールして画像を起動します。

AppDelegate.mを開き、次のコードをアプリケーションのdidFinishLaunchingまたはアプリケーションのdidFinishLaunchingWithOptions関数に追加します。

//1. add the image to the front of the view...
UIImageView *splashImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
[splashImage setImage: [UIImage imageNamed:@"Default"]];
[self.window addSubview:splashImage];
[self.window bringSubviewToFront:splashImage];

//2. set an anchor point on the image view so it opens from the left
splashImage.layer.anchorPoint = CGPointMake(0, 0.5);

//reset the image view frame
splashImage.frame = CGRectMake(0, 0, 320, 480);

//3. animate the open
[UIView animateWithDuration:1.0
                      delay:0.6
                    options:(UIViewAnimationCurveEaseOut)
                 animations:^{

                     splashImage.layer.transform = CATransform3DRotate(CATransform3DIdentity, -M_PI_2, 0, 1, 0);
                 } completion:^(BOOL finished){

                     //remove that imageview from the view
                     [splashImage removeFromSuperview];
                 }];

ここで3つのことが起こっています…

1)新しいUIImageViewを作成し、それをビューの上部に追加します2)画像の左側にアンカーポイントを設定して左側から開き、フレームをビューのフルサイズにリセットします3 )UIImageViewをアニメーション化し、完了時にビューから削除します

それだけです、それはとても簡単です。

ソース: http://jaysonlane.net/tech-blog/2012/03/path-2-0-style-animated-splash-screen-default-png/

13

LaunchScreen.xibを作成してから、コードを配置できる完全なレプリカを作成し、LaunchScreenAnimatorのようなクラスを作成して、デリゲートから呼び出すことができます。このクラスには、アニメーションが終了したときに通知するデリゲートがあります。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    LaunchScreenAnimator *la=[LaunchScreenAnimator createWithDelegate:self];
    self.window.rootViewController=la;
    [self.window makeKeyAndVisible];

    [la startAnimation];

    return YES;
}

-(void) splashAnimationFinished:(LaunchScreenAnimator*)view
{
    [self startWithDashboardWindow]; // replace the current rootViewController with whatever you want
}
0
Catalin