2

一連のアイテムのいずれかを描画するための単一のUIViewがあります。つまり、私の1つのUIViewサブクラスは、たとえば、正方形、円、または三角形を描画するように指示できます。

UIViewが中間点で別の形状を描画するように、そのビューを反転するトランジションが欲しいので、別のビューにトランジションしているように見えますが、実際には、で単一のビューを再描画しています。移行の中間点。

2つの異なるUIViewを使用して、アニメーションブロックでそれらを交換することなく、これを行う方法はありますか?スワップメカニズムを使用する必要があるものを再調整するのは少し不器用です。

理想的には、必要なのは、アニメーションが中間点にあるというコールバックまたは通知だけです。その後、新しい形状でビューを再描画できます。

助けてくれてありがとう!

4

3 に答える 3

1

フリップアニメーションの中間点を知っていたとしても、アニメーションの途中でビューのコンテンツを再描画しても何も起こらないと思います。ビューのレイヤーの内容はアニメーションの開始時にキャッシュされ、アニメーションが進行しても変化しないと思います。また、後ろに別のビューがない場合、アニメーションの最後でビューが左から右に反転してしまいます。

これをカスタムアニメーションとして実行したい場合は、この回答で説明しているMikeLeeのLemurFlip実装のようなものを使用して、これを2つに分割できます。アニメーションの前半が終わったら、ビューのコンテンツを再描画してアニメーションを完成させ、最初の場所に戻ることができます。

ただし、移行に応じてビューを切り替えない方が不器用に思えます。確かに、実行するにはさらに多くのコードが必要になります。

于 2010-01-04T18:41:00.947 に答える
0

あなたはこのようにsmthをしようとすることができます。たとえば、animationDurationプロパティは2.0fに設定されています。つまり、中間地点は1秒なので、次のように使用できます。

[self PerformSelector:@selector(yourCallbackMethod)withObject:nil afterDelay:1.0f];

于 2010-01-04T17:01:08.387 に答える
0

これができることを私が知っている唯一の方法は、Core Animationを使用してアニメーションを再作成し、タイマーを使用してpresentationLayerでアニメーションを監視することです。Core Animation Layersで利用できるKVOはないため、明示的に監視する必要があります。

言い換えれば、それはおそらくそれだけの価値はありません。問題を解決するための別の方法を考えることをお勧めします。

于 2010-01-04T17:01:28.010 に答える