0

私は、X 原点を持つ UIView を持っています。次に、CATransform3D でキーフレーム アニメーションを実行します。

[NSValue valueWithCATransform3D:CATransform3DMakeTranslation(-view.width, 0, 0)]

問題は、アニメーションが完了した後、ビューのフレームが視覚的に正しい場所にあることですが、それでも画面外にあると見なされるため、操作できません。フレーム プロパティをログに記録すると、画面外にあることも示されますが、視覚的にはそうではありません。

アニメーションの塗りつぶしモードはkCAFillModeForwardsであるため、アニメーションの最終値が固定されます。

この問題の解決策は何ですか?つまり、アニメーションの後にこのビューと対話し、実際に表示されていることをビューに通知しますか?

4

3 に答える 3

0

ビューをアニメーション化する前でも、ビューを操作できますか?view.userInteractionEnabledはYESに設定されていますか?

于 2013-02-16T04:18:55.543 に答える
0

-animationDidStop:finished:アニメーションが完了したら、CAAnimation デリゲート メソッドを使用して修正できます。

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
  ...
}
于 2013-02-16T01:52:12.017 に答える
0

より良い答えは、animateWithDuration:animations:completion: (およびそのメソッドのバリアント) などの UIView アニメーション メソッドを使用することです。

これらのメソッドを使用すると、実際のビュー プロパティでアニメーションを実行できます。アニメーションが完了すると、ビューは実際の宛先の場所になります。

center プロパティは、ビューを移動する最も簡単な方法です。変換を適用した場合、frame プロパティは有効ではありませんが、center プロパティは読み取りと書き込みの両方で常に有効です。

コア アニメーションは、ビューが移動するという錯覚を作成するだけです。アニメーションは、レイヤー ツリーの表示専用コピーで行われます。レイヤーのpresentationLayerから同じプロパティを読み取ることにより、アニメーションレイヤーのプロパティを照会できます。ただし、ビュー オブジェクトは、見かけの場所でのユーザー インタラクションには応答しません。ビューはまだ元の場所にあると考えています。

他のポスターが言ったように、アニメーションが終了したら、アニメーション完了デリゲート メソッドを使用してビューを最終的な場所に移動できますが、UIView アニメーションが行うことをよりクリーンかつシンプルに行うには、非常に手間がかかります。

于 2013-02-16T02:34:19.983 に答える