MKMapViewにMKAnnotationViewを追加しました。長押しすると、持ち上げて別の場所に移動できるといいのですが。
方法?特別な感謝!
AppleのLocationAwarenessGuideから>注釈ビューをドラッグ可能としてマークする:
ドラッグの最小限のサポートを実装するには、次のことを行う必要があります。
注釈オブジェクトで、setCoordinate:メソッドを実装して、マップビューが注釈の座標点を更新できるようにします。
注釈ビューを作成するときは、ドラッグ可能なプロパティをYESに設定します。
setCoordinateの実装:
#import <MapKit/MapKit.h>
@interface mapAnnotation : NSObject<MKAnnotation> {
double latitude, longitude;
}
@end
@implementation mapAnnotation
- (void)setCoordinate:(CLLocationCoordinate2D)coordinate{
latitude = coordinate.latitude;
longitude = coordinate.longitude;
}
-(CLLocationCoordinate2D)coordinate {
CLLocationCoordinate2D coordinate = {latitude,longitude};
return coordinate;
}
// ...
@end
ビューコントローラで注釈ビューを作成する:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
static NSString * const identifier = "identifier";
MKPinAnnotationView *pinView = (MKPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if (pinView ==nil) {
pinView = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:identifier];
pinView.animatesDrop = YES;
pinView.draggable = YES;
}
return pinView;
}
ユーザーのタッチを追跡し、それに応じてピンビューを移動します。このページの下部にあるDDAnnotationViewを見てください:http://digdog.tumblr.com/post/252784277/mapkit-annotation-drag-and-drop-with-callout-info
ユーザーがドラッグを停止したら、ビューの位置をマップ座標に変換し、注釈座標を変更します。ピンのアニメーションをいくつか投げます。
実用的な例を次に示します。https ://github.com/digdog/MapKitDragAndDropプロジェクトにDDAnnotationViewクラスとDDAnnotationクラスを追加し、この行の下にあるMKMapViewDelegateメソッドを使用してみてください。