Я не могу заставить длинный идентификатор распознавания жестов работать над представлением аннотации, только с видом карты. Сокращенный вариант моего кода:Использование UILongPressGestureRecognizer для удаления MKAnnotation
@interface AppDelegate : UIResponder <UIApplicationDelegate, CLLocationManagerDelegate, MKMapViewDelegate, UIGestureRecognizerDelegate, UIActionSheetDelegate>
{
CLLocationManager *locationManager;
// Views
IBOutlet MKMapView *mapView;
IBOutlet MKAnnotationView *annotationView;
UILongPressGestureRecognizer *longPress;
}
и части реализации в AppDelegate.m ...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
locationManager = [[CLLocationManager alloc] init];
[locationManager setDelegate:self];
[mapView setShowsUserLocation:YES];
longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self
action:@selector(deleteSelectedAnnotation:)];
[[self window] makeKeyAndVisible];
return YES;
}
- (void)mapView:(MKMapView *)mv didAddAnnotationViews:(NSArray *)views
{
annotationView = [views objectAtIndex:0];
[annotationView addGestureRecognizer:longPress];
id <MKAnnotation> mp = [annotationView annotation];
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance([mp coordinate], 250, 250);
[mv setRegion:region animated:YES];
}
- (IBAction)deleteSelectedAnnotation:(UIGestureRecognizer *)sender
{
if (sender.state == UIGestureRecognizerStateBegan)
{
NSLog(@"long press");
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Delete Record?"
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:@"Yes",@"No",nil];
[actionSheet showInView:mapView];
[actionSheet release];
}
}
Так вся эта вещь работает, если я изменить объект вида в соответствии с [annotationView addGestureRecognizer:longPress]
mapView
, Но я хочу, чтобы действие выполнялось только в том случае, если пользователь нажимает аннотацию, а не на карте. Что я делаю не так?
Спасибо.
Это хорошая мысль. Я смущен, хотя вы повторно использовали мое имя для annotationView как UIView. мой MKAnnotationView уже называется annotationView. Не могли бы вы это прояснить? Благодарю. –
Кроме того, я предполагаю, что 'myAnnotation' является' mp' в моем коде? –
Не могли бы вы ответить? Я хотел бы попытаться изучить этот вариант, но ваш ответ немного запутан. –