我在这里得到了一点点。
据我所知,我正在做的一切。
我正在this posting做它所说的,但没有骰子。
基本问题是拖动标记不会拖动。
这是故障点。我想专门化一个简单的黑色标记(基类是一个不可拖动的黑色标记)可以拖动。
这是它的界面:
/**************************************************************//**
\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:animated:永远不会被调用。
据我所知,我正在做的一切。
显然,我不是。
有什么想法吗?
以下是设置和回调:
/**************************************************************//**
\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;
}
答案 0 :(得分:1)
您需要将注释视图设置为可拖动。
[ret setDraggable:YES]
答案 1 :(得分:0)
我想在这里报告真实问题:
PEBCAK
问题在于图标上的拖动目标非常小。使用模拟器,操纵器(光标)也非常小,所以对它们来说可能是一个挑战。
用我的手指在设备上更好,尽管那也是抽搐。
BTW:到目前为止,地图的代码与上面的代码不同。我解决了一些其他问题。
如果有人想查看代码,整个项目都是开源的(GitHub -Look up BMLT IOS)。我目前正在2.0分支机构工作,并且有一段时间了,所以它是一个不断变化的目标。