5

NSTimerを追加して、ロケーションマネージャーからロケーションを記録し、これまでのロケーションをNSMutableArrayに配置します。

-(void)OnTimer:(NSTimer *)param{
     [self.locationRecoder addObject:self.manager.location];
}

UIにボタンを追加します。ボタンをクリックすると、このメソッドが呼び出されます。

-(IBAction)Click:(id)sender(){
   NSArray *coordinateArray = [self.locationRecorder valueForKeyPath:@"coordinate"];
   MKPolyline *lines = [MKPolyline ploylineWithCoordinates:(CLLocationCoordinate2D *)coordinateArray count:coordinateArray.count];
   [self.map addOverlay:lines];
}

その後、何も描かれていません。型キャストで何か間違ったことをしましたか?

4

1 に答える 1

15

このpolylineWithCoordinatesメソッドには、型の構造体のプレーンC配列が必要CLLocationCoordinate2Dです。

の呼び出し後、valueForKeyPathcoordinateArrayオブジェクトのですNSArray。 これは、構造体のC配列と同じではありません。NSValue

これをにキャストしても、構造体のC配列に変換さNSArrayれません。(CLLocationCoordinate2D *)

malloc代わりに、配列を使用してループすることにより、C配列を手動で作成する必要がありますlocationRecoder

CLLocationCoordinate2D *coordinateArray 
    = malloc(sizeof(CLLocationCoordinate2D) * locationRecorder.count);

int caIndex = 0;
for (CLLocation *loc in locationRecorder) {
    coordinateArray[caIndex] = loc.coordinate;
    caIndex++;
}

MKPolyline *lines = [MKPolyline polylineWithCoordinates:coordinateArray 
                        count:locationRecorder.count];

free(coordinateArray);

[self.map addOverlay:lines];
于 2012-10-26T01:29:48.043 に答える