Iphone MKAnnotationView是不可拖动的,尽管我认为它的实现是正确的?
我已尝试将MKMapView添加到我的新应用程序中。我创建了一个自定义MKAnnotationView->以便可以更改pin的图像。一切正常,直到我试着去拖动大头针。不管我做什么,都不会。还有一件事要说;MapView是大tableView单元格的子视图。但是平移和缩放工作正常,所以我不认为这与此有关 这是我的密码: MKAnnotation MapView所在的视图-委托方法-不包括我初始化MKAnnotation和addAnnotation的部分 有人看到我错过了什么吗Iphone MKAnnotationView是不可拖动的,尽管我认为它的实现是正确的?,iphone,ios,mapkit,mkannotation,Iphone,Ios,Mapkit,Mkannotation,我已尝试将MKMapView添加到我的新应用程序中。我创建了一个自定义MKAnnotationView->以便可以更改pin的图像。一切正常,直到我试着去拖动大头针。不管我做什么,都不会。还有一件事要说;MapView是大tableView单元格的子视图。但是平移和缩放工作正常,所以我不认为这与此有关 这是我的密码: MKAnnotation MapView所在的视图-委托方法-不包括我初始化MKAnnotation和addAnnotation的部分 有人看到我错过了什么吗 非常感谢 要使注释可
非常感谢 要使注释可拖动,它必须实现setCoordinate方法。仅仅将视图的draggable属性设置为YES是不够的 注释类已将坐标定义为只读 相反,将其定义为readwrite或assign,并删除坐标方法以及纬度和经度IVAR和属性,因为您可以直接设置坐标
还要添加@synthesis坐标,这样就不必手动编写getter/setter。要使注释可拖动,它必须实现setCoordinate方法。仅仅将视图的draggable属性设置为YES是不够的 注释类已将坐标定义为只读 相反,将其定义为readwrite或assign,并删除坐标方法以及纬度和经度IVAR和属性,因为您可以直接设置坐标
还添加了@synthesis坐标,这样就不必手动编写getter/setter。您是否将实现didChangeDragState的类设置为MKMapViewDelegate?如果您这样做,我会在调用viewForAnnotation后设置一个断点,以查看您的annotationView实际上已将Dragable设置为YES,使用lldb调试器-如果您不熟悉它,它是一个很棒的工具。您是否将实现didChangeDragState的类设置为MKMapViewDelegate?如果您这样做,我会在调用viewForAnnotation后设置一个断点,以查看您的annotationView实际上已将Dragable设置为YES,使用lldb调试器-如果您不熟悉它,它是一个很棒的工具。
@interface MyAnnotation : NSObject <MKAnnotation> {
}
//MKAnnotation
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@end
@implementation MyAnnotation
@synthesize coordinate;
@end
@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
- (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);
}
}