3

imageviewの幅を1時間で320から0に減らす必要があるアプリケーションを開発しています。このために私は次のコードを使用しています

     [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:3600];
    newRect.size.width = 0;
    imgView.frame = newRect;
    [UIView commitAnimations];

同じビューコントローラにとどまる場合は問題なく動作します。アニメーションが開始した後、ユーザーが他のビューコントローラに移動すると、アニメーションの処理方法がわかります。

これに加えて、もう1つ問題があります。アニメーション中、imageviewの画像は、同じ画像を使用しているアニメーション全体と同じように縮小しているように見えます。したがって、アニメーション中にimageViewの画像を変更したいのですが、どうすればこれを実現できますか。

アニメーションとは別にこれを行う他の方法はありますか?

どんな助けでもありがたいです。

4

1 に答える 1

5

コントローラとビューのライフサイクルでは、これを簡単に行うことはできません。使用しているオブジェクトは、現在必要なくなった場合にシステムによって割り当て解除される可能性があり、割り当てが解除されるため、開始したアニメーションは基本的に破棄されます。

アニメーションの進行状況をどこかに保存する必要があります。たとえば、ファイルやCoreDataデータベースに保存して、そのビューのインスタンス化全体でアニメーションを永続化する必要があります。正確な状況によっては、アニメーションの開始後にアニメーションの開始時刻を保存するだけで十分な場合があります。次に、viewWillAppearそれをロードして、その1時間にどれだけの進捗があったかを計算し、その時点から新しいアニメーションを開始できます。ユーザーには、アニメーションがバックグラウンドで進行したように見えます。

于 2013-01-04T09:43:09.593 に答える