我尝试将MKMapView添加到新应用中。我创建了一个自定义的MKAnnotationView->,以便可以更改图钉的图像。一切正常,直到我尝试拖动图钉。不管我做什么,都不会。只剩下一句话要说; MapView是一个大tableView单元的子视图。但是平移和缩放工作正常,所以我认为这与之无关...
这是我的代码:
MKA注释
@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);
}
}
有人看到我错过了吗?
首先十分感谢!
最佳答案
为了使注释可拖动,它必须实现setCoordinate
方法。仅将视图的draggable
属性设置为YES
是不够的。
您的注释类已将coordinate
定义为readonly
。
相反,将其定义为readwrite
或assign
并删除coordinate
方法(以及latitude
和longitude
ivars和属性,因为您可以直接设置坐标)。
还要添加一个@synthesize coordinate
,因此您不必手动编写getter / setter。
关于iphone - MKAnnotationView不可拖动,尽管我认为它已正确实现?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12556594/