我有点生气,在这里。
据我所知,我做的一切都是正确的。
我正在做这篇文章中所说的,但没有骰子。
基本问题是可拖动标记不会拖动。
这里是麻烦点。我想将一个简单的黑色标记(基类是一个不可拖动的黑色标记)专门化为可拖动的。
这是它的界面:
/**************************************************************//**
\class BMLT_Search_BlackAnnotationView
\brief We modify the black annotation view to allow dragging.
*****************************************************************/
@interface BMLT_Search_BlackAnnotationView : BMLT_Results_BlackAnnotationView
@property (nonatomic,readwrite,assign) CLLocationCoordinate2D coordinate;
- (id)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier coordinate:(CLLocationCoordinate2D)inCoordinate;
@end
这是它的实现:
/**************************************************************//**
\class BMLT_Search_BlackAnnotationView
\brief We modify the black annotation view to allow dragging.
*****************************************************************/
@implementation BMLT_Search_BlackAnnotationView
@synthesize coordinate;
/**************************************************************//**
\brief We simply switch on the draggable bit, here.
\returns self
*****************************************************************/
- (id)initWithAnnotation:(id<MKAnnotation>)annotation
reuseIdentifier:(NSString *)reuseIdentifier
coordinate:(CLLocationCoordinate2D)inCoordinate
{
self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
if ( self )
{
[self setDraggable:YES];
[self setCoordinate:inCoordinate];
}
return self;
}
/**************************************************************//**
\brief Handles dragging.
*****************************************************************/
- (void)setDragState:(MKAnnotationViewDragState)newDragState
animated:(BOOL)animated
{
#ifdef DEBUG
NSLog(@"BMLT_Search_BlackAnnotationView setDragState called with a drag state of %@.", newDragState);
#endif
self.dragState = newDragState;
}
@end
setDragState:动画:永远不会被调用。
据我所知,我做的一切都是正确的。
显然,我不是。
有任何想法吗?
这是设置和回调:
/**************************************************************//**
\brief If this is an iPad, we'll set up the map.
*****************************************************************/
- (void)setUpMap
{
if ( mapSearchView ) // This will be set in the storyboard.
{
#ifdef DEBUG
NSLog(@"A_BMLT_SearchViewController setUpIpadMap called (We're an iPad, baby!).");
#endif
BMLTAppDelegate *myAppDelegate = [BMLTAppDelegate getBMLTAppDelegate]; // Get the app delegate SINGLETON
CLLocationCoordinate2D center;
#ifdef DEBUG
NSLog(@"A_BMLT_SearchViewController setUpIpadMap We're using the canned coordinates.");
#endif
center.latitude = [NSLocalizedString(@"INITIAL-MAP-LAT", nil) doubleValue];
center.longitude = [NSLocalizedString(@"INITIAL-MAP-LONG", nil) doubleValue];
if ( [myAppDelegate myLocation] )
{
#ifdef DEBUG
NSLog(@"A_BMLT_SearchViewController setUpIpadMap We know where we are, so we'll set the map to that.");
#endif
center = [myAppDelegate myLocation].coordinate;
}
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(center, 25000, 25000);
[mapSearchView setRegion:region animated:NO];
BMLT_Results_MapPointAnnotation *myMarker = [[BMLT_Results_MapPointAnnotation alloc] initWithCoordinate:center andMeetings:nil];
[myMarker setTitle:@"Marker"];
[mapSearchView addAnnotation:myMarker];
if ( [[BMLT_Prefs getBMLT_Prefs] keepUpdatingLocation] ) // If the user wants us to keep track of them, then we'll do so.
{
[mapSearchView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];
}
else
{
[mapSearchView setUserTrackingMode:MKUserTrackingModeNone animated:NO];
}
}
}
#pragma mark - MkMapAnnotationDelegate Functions -
/**************************************************************//**
\brief Returns the view for the marker in the center of the map.
\returns an annotation view, representing the marker.
*****************************************************************/
- (MKAnnotationView *)mapView:(MKMapView *)mapView
viewForAnnotation:(id < MKAnnotation >)annotation
{
#ifdef DEBUG
NSLog(@"A_BMLT_SearchViewController viewForAnnotation called.");
#endif
static NSString* identifier = @"single_meeting_annotation";
MKAnnotationView* ret = [mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if ( !ret )
{
ret = [[BMLT_Search_BlackAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier coordinate:[annotation coordinate]];
}
return ret;
}