iOSでは、2つの円があり、どちらもUIView
オブジェクトである場合、それらの円center
またはframe
はアニメーションを使用してUIView
アニメーション化できます。
しかし、難しいのは、UITreeView
これら2つの円を含むコンテナが、を使用して円の中心を結ぶ線を引くことdrawRect
です。では、またはをdrawRect
使用して線を描画することができ、 'sを使用して線を描画することを選択しました。これは、実際には下の呼び出しである必要がありますが、使いやすいです。CG
UIKit
UIBezierPath
moveToPoint
addLineToPoint
CG
ただし、一方の円がもう一方の位置にアニメーション化されると、線はそれと一緒にアニメーション化されないため、アニメーションは奇妙に見える可能性があります。それをアニメーション化する方法はありますか?
クラス(円)内ではなくTreeViewクラスでアニメーション化しようとしましたUINodeView
が、それは役に立ちません。実際、そのdrawRect
方法でランダムな色を使用して円を描くと、アニメーションで円がゆっくり動くと、色が急激に変化することdrawRect
はなく、呼び出されていないことを示しています。おそらくCALayer
、アニメーション化されているキャッシュされた画像を保持しているだけです。
では、ラインをアニメーション化する方法もありますか?
私が考えることができる他の方法は次のとおりです。
1)ハックを使用しUIView
て線を保持し、そのフレームもアニメートできるようにしますが、円が移動して線をUIView内で(0、0)から(200、200)に描画する必要がある場合はどうなりますか?ただし、線は反対方向に傾斜する必要があり、(200、0)から(0、200)に描画されるため、この場合はおそらく機能しません。(しかし、ある種の変換を使用して画像を同時に反転させると、おそらく機能しますが、変換をいつ使用するかを検討するのは複雑に思えます)
2)を使用CADisplayLink
してアニメーションを作成し、それを呼び出すだけ[treeView setNeedsDisplay];
で、この場合はdrawRect
確実に呼び出されます。(やり過ぎかもしれません。TreeViewの背景全体が最初に消去されるため、画面が少し点滅する場合があります)
それとも、もっと簡単で良い方法はありますか?