5

ユーザーの位置をリアルタイムで追跡し、コースをMKMapView. GPS の読み取り値が取得されるたびに、現在の場所と古い場所の間にポリラインが描画され、最終的にユーザーが移動した場所のトラック (またはブレッドクラム) が形成されます。

以下のようなコードを使用して、事前にすべての座標を持っていると仮定して、トラックを使用MKPolylineして描画することに慣れています。MKPolylineViewCLLocationCoordinate2D

MKPolyline *route = [MKPolyline polylineWithCoordinates:coordinates count:[self.coordinateArray count]];        
[mapView addOverlay:route];

ただし、CLLocationCoordinate2D(デリゲート メソッドが呼び出されると) リアルタイムで座標を取得するだけなのでlocationManager:didUpdateToLocation:fromLocation:、新しいポリラインを描画する最善の方法がわかりません。

既存の線を拡張できますか (つまり、C ベースのcoordinates配列に追加します - C の経験があまりないため、これを行う方法がわかりません)、または次の 2 つの座標の間に新しいポリラインを作成する必要がありますか (ただし、マップ上の個々のポリラインが多すぎると、パフォーマンスとメモリ使用量に影響を与える可能性があります...)?

前もって感謝します。

4

1 に答える 1

5

まず、MKPolyline / MKPolylineView を更新する方法を参照してください。、特にBreadcrumbサンプル コードへのリンク。必要なものの良い出発点になるかもしれません。

CrumbPathただし、そのオブジェクトの重要な部分は への呼び出しであることがわかりますrealloc。そうです、ポイントの配列を効率的に保存したい場合は、C スタイルの配列を管理する方法を知る必要があります。はい、これは簡単ではありません。はい、C スタイルの配列操作はメモリ リークの誘因です。

Breadcrumb サンプルはrealloc、配列のサイズを変更するために使用します。配列が使用するメモリをNSMutableData型で割り当てることで、少し安全になります。Is it ok to use “classic” malloc()/free() in Objective-C/iPhone apps?への回答として推奨されます。. 他のソリューションを読んで、通常の Cmalloc()free()関数が同じ仕事をしていることを確認してください。NSMutableData には非常に便利なincreaseLengthBy:メソッドがあることに注意してください。

すべての C 学習者がsizeof()誤って使用しようとする理由と、それを適切に使用する方法を理解すると、C メモリ管理を理解できます。

于 2012-04-07T12:59:45.477 に答える