Bạn có thể sử dụng UILongPressGestureRecognizer cho việc này. Bất cứ nơi nào bạn tạo hoặc khởi tạo MapView, đầu tiên gắn recognizer với nó:
UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc]
initWithTarget:self action:@selector(handleLongPress:)];
lpgr.minimumPressDuration = 2.0; //user needs to press for 2 seconds
[self.mapView addGestureRecognizer:lpgr];
[lpgr release];
Sau đó, trong xử lý cử chỉ:
- (void)handleLongPress:(UIGestureRecognizer *)gestureRecognizer
{
if (gestureRecognizer.state != UIGestureRecognizerStateBegan)
return;
CGPoint touchPoint = [gestureRecognizer locationInView:self.mapView];
CLLocationCoordinate2D touchMapCoordinate =
[self.mapView convertPoint:touchPoint toCoordinateFromView:self.mapView];
YourMKAnnotationClass *annot = [[YourMKAnnotationClass alloc] init];
annot.coordinate = touchMapCoordinate;
[self.mapView addAnnotation:annot];
[annot release];
}
YourMKAnnotationClass là một lớp học mà bạn xác định rằng phù hợp với các giao thức MKAnnotation. Nếu ứng dụng của bạn sẽ chỉ chạy trên iOS 4.0 trở lên, bạn có thể sử dụng lớp được xác định trước MKPointAnnotation thay thế.
Ví dụ về cách tạo lớp MKAnnotation của riêng bạn, xem các ứng dụng mẫu WeatherMap và MapCallouts.
Cảm ơn bạn, nó làm việc –
câu trả lời Awesome, cảm ơn. Cá nhân tôi lật câu lệnh if thành '==' để nó trả về nếu nó không phải là * 'UIGestureRecognizerStateBegan'. Thực hiện việc này sẽ thả ghim sau khoảng thời gian đã chỉ định, ngay cả khi người dùng vẫn đang giữ bản đồ mà tôi mong muốn (và cách ứng dụng Maps chính thức thực hiện). –
Tôi chỉ muốn nói rằng tôi đã thực hiện câu trả lời của bạn vào dự án của tôi và nó hoạt động như một sự quyến rũ. Cảm ơn bạn vì câu trả lời tuyệt vời nhất của bạn. – DoubleDunk