Πώς μπορώ να ανιχνεύσει ένα μόνο πάτημα σε μια παρουσία του MKMapView; Έχω στην υποτάξη MKMapViewκαι στη συνέχεια να παρακάμψετε τη touchesEndedμέθοδο;
Ευχαριστώ,
-Chris
Πώς μπορώ να ανιχνεύσει ένα μόνο πάτημα σε μια παρουσία του MKMapView; Έχω στην υποτάξη MKMapViewκαι στη συνέχεια να παρακάμψετε τη touchesEndedμέθοδο;
Ευχαριστώ,
-Chris
Αν είστε απλά ψάχνουν για να ειδοποιηθείτε της βρύσης χειρονομίες χωρίς να επηρεάζει οποιοδήποτε άλλο αφής συμπεριφορά του χάρτη, θα θελήσετε να χρησιμοποιήσετε ένα UITapGestureRecognizer. Είναι εξαιρετικά απλό, απλά βάλτε σε κάποιο κώδικα όπως αυτό.
UITapGestureRecognizer* tapRec = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(didTapMap:)];
[theMKMapView addGestureRecognizer:tapRec];
[tapRec release];
Αυτό θα καλέσει το didTapMapκάθε φορά που theMKMapViewλαμβάνει μια χειρονομία της βρύσης και όλο το τσίμπημα, και σύροντας χειρονομίες θα συνεχίσει να λειτουργεί όπως πριν.
Ελπίδα αυτό θα βοηθήσει: Πώς να υποκλέψει πινελιές καταχωρήσεις σε MKMapView ή UIWebView αντικείμενα;
Λειτουργεί τέλεια για iOS 8
- (void)viewDidLoad
{
[super viewDidLoad];
UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:nil];
doubleTap.numberOfTapsRequired = 2;
doubleTap.numberOfTouchesRequired = 1;
[self.mapView addGestureRecognizer:doubleTap];
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
singleTap.numberOfTapsRequired = 1;
singleTap.numberOfTouchesRequired = 1;
[singleTap requireGestureRecognizerToFail: doubleTap];
[self.mapView addGestureRecognizer:singleTap];
}
- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer
{
if (gestureRecognizer.state != UIGestureRecognizerStateEnded)
return;
//Do your work ...
}
Ή ανάλογα με το τι προσπαθούμε να κάνουμε, να προσθέσετε ένα MKAnnotation(σημαία, με επεξήγηση), έτσι ώστε να έχουν κάτι να πατήσετε - και, στη συνέχεια, εκπρόσωπος χάρτη σας θα λάβετε μια εκδήλωση για παράδειγμα.
mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
2 σεντ μου για Swit 5.x:
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch = touches.first {
let v = touch.view
let ssv = v?.superview?.superview
if ssv === self.mapView{
searchBar.resignFirstResponder()
}
}
}
δουλεύει. αλλά ειλικρινά μπορεί να σπάσει αν το μήλο αλλάζει στρώματα απόψεων. καλύτερα μια αναγνώρισης.
Τίποτα δεν βρήκα ποτέ κατεργασμένοι, αλλά ήρθα με αυτό ατελής λύση: Σε viewDidLoad
let singleTapRecognizer = UITapGestureRecognizer(target: self, action: #selector(onMapClicked))
singleTapRecognizer.delegate = self
mapView.addGestureRecognizer(singleTapRecognizer)
Σε εκπρόσωπος:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
return touch.view!.frame.equalTo(mapView.frame)
}
Απλά προσθέστε κάποιο απόσπασμα κώδικα ως απεικόνιση @ tt-kilew απάντηση. Στην περίπτωσή μου, θέλω να επισημάνω το χρήστη με το ίδιο στο χάρτη, αλλά δεν θέλουν να διακόψουν σύρετε την αφή του.
@interface PrettyViewController () <MKMapViewDelegate>
@property (weak, nonatomic) IBOutlet MKMapView *mapView;
@property (assign, nonatomic) BOOL userTouchTheMap;
@end
@implementation PrettyViewController
#pragma mark - UIResponder
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
self.userTouchTheMap = [[touches anyObject].view isEqual:self.mapView];
}
#pragma mark - MKMapViewDelegate
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation {
//We just positioning to user
if (!self.userTouchTheMap) {
CLLocationDistance radius = 5000;
[self.mapView setRegion:MKCoordinateRegionMakeWithDistance(userLocation.location.coordinate, 2*radius, 2*radius) animated:YES];
}
}
@end
Μπορείτε επίκλιση αυτή τη στιγμή τομής αγγίζει σε μια προβολή χάρτη, μπορείτε να δοκιμάσετε layering ένα αδιαφανές άποψη εκεί και να δούμε αν παίρνει πινελιές ...