7

私は、非常に大きな画像 (2 倍にズームしても Retina 品質のままのフルスクリーン画像) でアニメーションを実行する iPad アプリに取り組んできました。ズームとパンの際にスムーズなトランジションを得るために多くの時間を費やしました。ただし、アプリを実行するiOS7と、アニメーションが非常にぎくしゃくします (フレームレートが遅くなります)。

さらにテストすると、問題の原因はズーム アニメーションであることがわかります (パンは問題の原因ではありません)。alpha興味深いことに、スケーリングされる画像の を0.995(の代わりに)に設定することで修正できました1.0

2つの質問があります

  1. iOS7これを実現するために何が変わったのですか?
  2. ビューの不透明度を変更すると違いが生じるのはなぜですか?

上記の質問の詳細情報:

アニメーション設定

アニメーションはすべて事前定義されており、ユーザーの操作で再生されます。アニメーションはすべてパンとズームの組み合わせです。アニメーションはとてもシンプルです:

[UIView animateWithDuration:animationDuration delay:animationDelay options:UIViewAnimationOptionCurveEaseInOut animations:^{
    self.frame = nextFrame;
    //...
} completion:^(BOOL finished) {
    //...
}];

ぎくしゃくしたアニメーションを修正するためalphaに、アニメーションの前に

self.alpha = 0.99;

いくつかの興味深い点:

  1. alphaアニメーションの内部設定も同様に機能します
  2. alphaバックをアニメーションの後に設定してから1.0、1.0 アルファでリバース アニメーションを実行すると、スムーズなリバース アニメーションが得られません。

不透明度修正

複数の画像をスケーリングおよびパンするときにアニメーションをスムーズにするために、以前に不透明度の修正を使用しました。たとえば、2 つの大きな画像を異なる速度でパンおよびスケーリングし、一方を他方の上に重ねました。下のイメージ (下のイメージ) の以前にレンダリングされていない部分が表示されると、アニメーションがぎくしゃくします (パンとスケーリング)。alphaこの場合に役立つ理由についての私の考えは、上部の画像に少し透明度がある場合、下部の画像を常にレンダリングする必要があるためです。つまり、アニメーションが発生する前にキャッシュできるということです。この考えは、逆のアニメーションを実行し、ぎくしゃくしたアニメーションが表示されないことによって裏付けられています。(これについても別の考えを持っている人がいるかどうか知りたいと思います)。

上記のことを言っても、画像が1つしかない場合にこれがどのように影響するかはわかりません(質問で説明している状況のように)。特に、ぎくしゃくしたアニメーションを取得した後、リバース アニメーションがまだぎくしゃくしている場合。2 つの状況のもう 1 つの相違点は、現在の問題ではスケーリングのみが問題を引き起こしているのに対し、二重画像の問題ではスケーリングだけでなくパン発生していたことです。


上記が明確であることを願っています-洞察をいただければ幸いです。

4

1 に答える 1