2

このチュートリアルを使用して、MapKit をアプリケーションに統合します: http://iphonebcit.wordpress.com/iphone-map-kit-tutorial/

CLLocationCoordinate2D coordinate;
coordinate.latitude = 49.2802;
coordinate.longitude = -123.1182;

NSUInteger count = 1;
for(int i = 0; i < 10; i++) {
    CGFloat latDelta = rand()*.035/RAND_MAX - .02;
    CGFloat longDelta = rand()*.03/RAND_MAX - .015;

    CLLocationCoordinate2D newCoord = {coordinate.latitude+latDelta, coordinate.longitude+longDelta};
    MapDemoAnnotation* annotation = [[MapDemoAnnotation alloc] initWithCoordinate:newCoord andID:count++];
    [mapView addAnnotation:annotation];
    [annotation release];
}

- (MKAnnotationView *)mapView:(MKMapView *)mapViewLocal viewForAnnotation:(id <MKAnnotation>)annotation {
MKPinAnnotationView *pinView = (MKPinAnnotationView*)[mapViewLocal dequeueReusableAnnotationViewWithIdentifier:@"Pin"];
if(pinView == nil) {
    pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Pin"];
    pinView.pinColor = MKPinAnnotationColorPurple;
    pinView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    pinView.animatesDrop = YES;
    pinView.canShowCallout = YES;
} else {
    pinView.annotation = annotation;
}
return pinView;

}

そのため、ピンはマップ上にランダムに設定されます。私のアプリケーションでは、座標が変わります。地図上で更新されるように、注釈の座標を変更するにはどうすればよいですか?

誰か知っていますか?

4

3 に答える 3

2

iPhone SDK 3.x では、ピンの注釈を削除して再度設定する必要があります。マップに多くの注釈がある場合、これはあまり良くありません。

画面に表示されているピンの注釈のみを表示/更新するように、より良いものにしようとしています。そのため、ユーザーがニューヨークにズームインすると、サンフランシスコやユーザーが見ることができない以外にピン注釈はありません。したがって、パフォーマンスははるかに良くなります。

おそらく将来、これが可能になるでしょう。そうだといい :-)

于 2010-02-08T12:25:24.423 に答える
1

このチュートリアルは、マップ ビューを表示するためだけのものであり、他には何もありません。より大きなチュートリアルが必要になります。これは便利だと思いました:

http://blog.objectgraph.com/index.php/2009/04/02/iphone-sdk-30-playing-with-map-kit/

おそらく、マップ上のすべての注釈をループして削除し、データ配列をループして注釈を再度追加する必要があります。もっと賢く、データ配列をループして、マップ上に同じ緯度/経度のピンが既にあるかどうかを確認することもできますが、その方法はより複雑になります。

于 2009-12-10T03:02:40.370 に答える
1

現時点では注釈を行っているので、簡単なテストを行いました。コンパイラの警告が表示されるため、サポートされていない可能性があります。しかし、それは機能します。

カスタム MKAnnotation クラスを作成して、座標プロパティを書き込み可能に設定できるようにします。

@property (nonatomic, readwrite) CLLocationCoordinate2D coordinate;

次に、必要なイベントまたは間隔で、次のようなものを使用して座標を変更します。

    CLLocation *loc=[[CLLocation alloc] initWithLatitude:55.0 longitude:17.0];
annotation.coordinate=loc.coordinate;
[loc release];
于 2010-05-18T12:01:48.593 に答える