マップに追加されるたびに、MKCircle を 0 から指定された半径サイズに拡張したいと考えています。MKOverlayRenderer は良い結果をもたらしてくれますが、あまりにも自然に円を追加してしまいます。アニメーション化して入り口をより滑らかにしたいのですが、アニメーションレイヤーなしでそれを行う方法がわかりません。
拡大する UIView を CABasicAnimation で追加し、完了時にオーバーレイに置き換えようとしましたが、コードが見苦しく、オーバーレイが追加されるとちらつきが目立ちます。
アニメーション オーバーレイがあると主張する他の 2 つのプロジェクトを見てきましたが、どちらも私が探している特効薬ではありません。
- http://yickhong-ios.blogspot.com/2012/04/animated-circle-on-mkmapview.html 2012 年に、この男は MKCircleView をサブクラス化しましたが、これは非推奨/強く推奨されていないようです。
- https://github.com/jhurray/iOS7AnimatedMapOverlayこの男は、UIImageView をサブクラス化し、円の png を追加し、いくつかの CABasicAnimations を追加して展開およびフェードさせます。次に、注釈が選択されるたびに、この画像ビューをマップに追加します。アニメーションは正常に動作しますが、領域が変更されるたびにアニメーションが削除され、領域の変更が完了したときにのみ再び追加されます。リージョンの変更時に再描画される機能的なオーバーレイではありません。彼が持っているのは、オーバーレイが必要な場合は「変更してください」というコメントが付いた nil に設定された MKCircle だけです。UIImageView の展開が完了したときにオーバーレイを追加するように「変更」することもできますが、UIView の回避策と同じちらつきの結果が生じることがわかります。
私がよくわからないと考えている別のアプローチがあります (Core Graphics だけからアニメーション効果を生成しようとしたことがないため) MKOverlayRenderer
。- (void)drawMapRect:
高さ x = 0 で、an を使用しNSTimer
て x をインクリメントしsetNeedsDisplayInMapRect
、円が最大サイズに達するまで呼び出します。それは私には遠回りのように思えますが、もっと簡単な方法があるかもしれません。
これについて正しい方向に向けてくれる人が必要です。