UIView
のCoreGraphicsコンテンツをアニメーション化することはできますか?UIViewのCoreGraphics/drawRectコンテンツにアニメ化
は、私はそうのようなdrawRect:
メソッドを実装MyView
呼ばUIView
サブクラスがあるだろう。つまり
- (void) drawRect: (CGRect) rect {
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(c, someColor);
CGContextSetLineWidth(c, someWidth);
CGContextMoveToPoint(c, leftOfMyUIView, topOfMyUIView);
CGContextAddLineToPoint(c, leftOfMyUIView, bottomOfMyUIView);
CGContextStrokePath(c);
}
を - それはUIViewのサブクラスの私の左手側を下に垂直線を描画します。このUIViewをアニメーション化して、行がビューの左側から右側に移動するようにする簡単な方法はありますか?私はそれを左から右に「ドリフト」したいと思います。
私は移動しない理由のために明確にするために、MyView
のインスタンスを移動/アニメーションできません。私が考えることができる最良の解決策は、新しいUIView
サブクラスを追加することです。何かLineView extends UIView
のようなものを作成し、私が描画したい線の正確な寸法をLineViewにして、独自のdrawRect
メソッドを使用して塗りつぶし、次にLineView
のインスタンスをサブビューとしてMyView
に追加します。これにより、アニメーションブロックを使用してLineView
オブジェクトの位置をアニメートすることができますが、非常に単純なものを達成するにはあまりにも複雑に思えます。
あなたのアップデートは、私が最初にこの質問を見たときに示唆していた答えです... drawRectはアニメーションではなく、単一の時点で描画するためのものです。ビューのプロパティをアニメーション化します(この場合は 'center')。あなたのラインをサブビューやサブレイヤにする(CAShapeLayerは簡単に思い浮かばります)、それを動かすのが唯一の方法です。 – jrturton
私が取り組んでいる問題は、これらの 'LineView'インスタンスの多く(hundereds)を作成する必要があることを意味します。私は、各行の位置をアニメーション化するより複雑なことはしません。あなたの2つの提案( 'UIView'や' CALayer')のどれがこの文脈に最も適しているのでしょうか?彼らの間にパフォーマンスが重視されていますか? – Barjavel
CAShapeLayerが最適です。新しいビューをまったく作成していない場合は、ビューのプロパティに過ぎません。 – jrturton