4

iOSでは、2つの円があり、どちらもUIViewオブジェクトである場合、それらの円centerまたはframeはアニメーションを使用してUIViewアニメーション化できます。

しかし、難しいのは、UITreeViewこれら2つの円を含むコンテナが、を使用して円の中心を結ぶ線を引くことdrawRectです。では、またはをdrawRect使用して線を描画することができ、 'sを使用して線を描画することを選択しました。これは、実際には下の呼び出しである必要がありますが、使いやすいです。CGUIKitUIBezierPathmoveToPointaddLineToPointCG

ただし、一方の円がもう一方の位置にアニメーション化されると、線はそれと一緒にアニメーション化されないため、アニメーションは奇妙に見える可能性があります。それをアニメーション化する方法はありますか?

クラス(円)内ではなくTreeViewクラスでアニメーション化しようとしましたUINodeViewが、それは役に立ちません。実際、そのdrawRect方法でランダムな色を使用して円を描くと、アニメーションで円がゆっくり動くと、色が急激に変化することdrawRectはなく、呼び出されていないことを示しています。おそらくCALayer、アニメーション化されているキャッシュされた画像を保持しているだけです。

では、ラインをアニメーション化する方法もありますか?

私が考えることができる他の方法は次のとおりです。

1)ハックを使用しUIViewて線を保持し、そのフレームもアニメートできるようにしますが、円が移動して線をUIView内で(0、0)から(200、200)に描画する必要がある場合はどうなりますか?ただし、線は反対方向に傾斜する必要があり、(200、0)から(0、200)に描画されるため、この場合はおそらく機能しません。(しかし、ある種の変換を使用して画像を同時に反転させると、おそらく機能しますが、変換をいつ使用するかを検討するのは複雑に思えます)

2)を使用CADisplayLinkしてアニメーションを作成し、それを呼び出すだけ[treeView setNeedsDisplay];で、この場合はdrawRect確実に呼び出されます。(やり過ぎかもしれません。TreeViewの背景全体が最初に消去されるため、画面が少し点滅する場合があります)

それとも、もっと簡単で良い方法はありますか?

4

1 に答える 1

1

パスをCAShapeLayerに割り当てることができます(CAShapeLayerを+ layerClassとして返すUIViewサブクラスでパスをラップするなど)。パスはCGPath-pathプロパティに割り当てられます(UIBezierPathはCGPathプロパティを提供することに注意してください)。次に、アニメーション化できる行がビューにあります(UIView +beginAnimationsを使用したグループアニメーションなど) 。

于 2012-09-06T20:16:04.107 に答える