Musiałem uzyskać koordynację punktu, w którym użytkownik dotknął MKMapView. Nie pracuję z narzędziem do tworzenia interfejsu. Czy możesz podać jeden przykład lub link.Jak dodać pinezkę do MKMapView (IOS) podczas dotykania?
dziękuję
Musiałem uzyskać koordynację punktu, w którym użytkownik dotknął MKMapView. Nie pracuję z narzędziem do tworzenia interfejsu. Czy możesz podać jeden przykład lub link.Jak dodać pinezkę do MKMapView (IOS) podczas dotykania?
dziękuję
Można użyć UILongPressGestureRecognizer do tego. Gdziekolwiek utworzyć lub zainicjować MapView najpierw dołączyć do niego rozpoznawania:
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];
Następnie w programie obsługi gestów:
- (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 jest klasą zdefiniować, że jest zgodny z protokołem MKAnnotation. Jeśli Twoja aplikacja będzie działać tylko w systemie iOS 4.0 lub nowszym, możesz zamiast tego użyć predefiniowanej klasy MKPointAnnotation.
Przykłady na temat tworzenia własnej klasy MKAnnotation można znaleźć w przykładowych aplikacjach WeatherMap i MapCallouts.
Dziękuję Annie za udzielenie tak wspaniałej odpowiedzi! Oto wersja Swift, jeśli ktokolwiek jest zainteresowany (odpowiedź została zaktualizowana do składni Swift 3.0).
Tworzenie UILongPressGestureRecognizer:
let longPressRecogniser = UILongPressGestureRecognizer(target: self, action: #selector(MapViewController.handleLongPress(_:)))
longPressRecogniser.minimumPressDuration = 1.0
mapView.addGestureRecognizer(longPressRecogniser)
Handling gest:
func handleLongPress(_ gestureRecognizer : UIGestureRecognizer){
if gestureRecognizer.state != .began { return }
let touchPoint = gestureRecognizer.location(in: mapView)
let touchMapCoordinate = mapView.convert(touchPoint, toCoordinateFrom: mapView)
let album = Album(coordinate: touchMapCoordinate, context: sharedContext)
mapView.addAnnotation(album)
}
Wow ... Nie zauważyłem tego i spędziłem dużo czasu na konwersji. –
Możliwe jest użycie _ ** let longPressRecogniser = UILongPressGestureRecognizer (target: self, action: "handleLongPress:") ** _ –
@Dx_ tak możesz, ponieważ program rozpoznający nie jest modyfikowany. Właściwości w kamerze są modyfikowane. – 3366784
Dziękuję, że to działa –
Niesamowite odpowiedź, dzięki. Osobiście zamieniłem instrukcję if na '==', więc ona zwraca, jeśli * nie jest * 'UIGestureRecognizerStateBegan'. Wykonanie tej czynności spowoduje usunięcie kodu PIN po określonym czasie, nawet jeśli użytkownik nadal trzyma mapę, która była dla mnie pożądana (i jak działa oficjalna aplikacja Mapy). –
Chciałbym tylko powiedzieć, że zaimplementowałem twoją odpowiedź w moim projekcie i działa jak czar. Dziękuję za najdoskonalszą odpowiedź. – DoubleDunk