1

新しいアプリにMKMapViewを追加してみました。ピンの画像を変更できるように、カスタムMKAnnotationView->を作成しました。ピンをドラッグしようとするまで、すべてが機能します。私が何をしても、それはうまくいきません。あと1つだけ言いたいことがあります。MapViewは、大きなtableViewセルのサブビューです。しかし、パンとズームは適切に機能するので、それとは関係がないと思います...

これが私のコードです:

MKAnnotation

@interface MyAnnotation : NSObject <MKAnnotation> {


}


//MKAnnotation
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;

@end

@implementation MyAnnotation
@synthesize coordinate;


@end

MKAnnotationView

@interface MyAnnotationView : MKAnnotationView {

}

@end

@implementation MyAnnotationView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:CGRectMake(self.frame.origin.x, self.frame.origin.y, 38, 43)];
    if (self) {
        // Initialization code
        UIImage* theImage = [UIImage imageNamed:@"partyPin.png"];

        if (!theImage)
            return nil;
        self.image = theImage;
    }
    return self;
}

@end

MapViewが含まれるビュー-メソッドの委任-MKAnnotationと「addAnnotation」を初期化する部分は含まれません

- (MKAnnotationView *)mapView:(MKMapView *)lmapView viewForAnnotation:(id <MKAnnotation>)annotation {

    MyAnnotationView *myAnnotationView = (myAnnotationView *)[lmapView dequeueReusableAnnotationViewWithIdentifier:@"myView"];
    if(myAnnotationView == nil) {
        myAnnotationView = [[MyAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"myView"];
    }

    myAnnotationView.draggable = YES;
    myAnnotationView.annotation = annotation;

    return myAnnotationView;
}

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView didChangeDragState:(MKAnnotationViewDragState)newState fromOldState:(MKAnnotationViewDragState)oldState
{
    if (newState == MKAnnotationViewDragStateEnding)
    {
        CLLocationCoordinate2D droppedAt = annotationView.annotation.coordinate;
        NSLog(@"dropped at %f,%f", droppedAt.latitude, droppedAt.longitude);
    }
}

誰かが私が逃したものを見ますか?

よろしくお願いします!

4

1 に答える 1

4

アノテーションをドラッグ可能にするには、setCoordinateメソッドを実装する必要があります。ビューのdraggableプロパティをに設定するだけYESでは不十分です。

アノテーションクラスはとして定義さcoordinateれていreadonlyます。

代わりに、readwriteまたはとして定義しassign、メソッドを削除します(座標を直接設定できるため、およびivarsとプロパティcoordinateも同様です)。latitudelongitude

また@synthesize coordinate、ゲッター/セッターを手動で作成する必要がないように、を追加します。

于 2012-09-23T22:56:38.120 に答える