iPhone: Ανίχνευση Πατήστε στο MKMapView

ψήφοι
19

Πώς μπορώ να ανιχνεύσει ένα μόνο πάτημα σε μια παρουσία του MKMapView; Έχω στην υποτάξη MKMapViewκαι στη συνέχεια να παρακάμψετε τη touchesEndedμέθοδο;

Ευχαριστώ,

-Chris

Δημοσιεύθηκε 14/08/2009 στις 03:22
πηγή χρήστη
Σε άλλες γλώσσες...                            


8 απαντήσεις

ψήφοι
31

Αν είστε απλά ψάχνουν για να ειδοποιηθείτε της βρύσης χειρονομίες χωρίς να επηρεάζει οποιοδήποτε άλλο αφής συμπεριφορά του χάρτη, θα θελήσετε να χρησιμοποιήσετε ένα UITapGestureRecognizer. Είναι εξαιρετικά απλό, απλά βάλτε σε κάποιο κώδικα όπως αυτό.

UITapGestureRecognizer* tapRec = [[UITapGestureRecognizer alloc] 
   initWithTarget:self action:@selector(didTapMap:)];
[theMKMapView addGestureRecognizer:tapRec];
[tapRec release];

Αυτό θα καλέσει το didTapMapκάθε φορά που theMKMapViewλαμβάνει μια χειρονομία της βρύσης και όλο το τσίμπημα, και σύροντας χειρονομίες θα συνεχίσει να λειτουργεί όπως πριν.

Απαντήθηκε 31/12/2010 στις 21:30
πηγή χρήστη

Απαντήθηκε 10/11/2009 στις 13:27
πηγή χρήστη

ψήφοι
2

Λειτουργεί τέλεια για 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 ...
     }
Απαντήθηκε 03/04/2015 στις 10:46
πηγή χρήστη

ψήφοι
2

Ή ανάλογα με το τι προσπαθούμε να κάνουμε, να προσθέσετε ένα MKAnnotation(σημαία, με επεξήγηση), έτσι ώστε να έχουν κάτι να πατήσετε - και, στη συνέχεια, εκπρόσωπος χάρτη σας θα λάβετε μια εκδήλωση για παράδειγμα.

mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control

Απαντήθηκε 18/09/2009 στις 09:31
πηγή χρήστη

ψήφοι
0

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()
        }
    }
}

δουλεύει. αλλά ειλικρινά μπορεί να σπάσει αν το μήλο αλλάζει στρώματα απόψεων. καλύτερα μια αναγνώρισης.

Απαντήθηκε 16/09/2019 στις 19:19
πηγή χρήστη

ψήφοι
0

Τίποτα δεν βρήκα ποτέ κατεργασμένοι, αλλά ήρθα με αυτό ατελής λύση: Σε 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)
}
Απαντήθηκε 20/09/2017 στις 09:34
πηγή χρήστη

ψήφοι
0

Απλά προσθέστε κάποιο απόσπασμα κώδικα ως απεικόνιση @ 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
Απαντήθηκε 07/04/2017 στις 13:59
πηγή χρήστη

ψήφοι
0

Μπορείτε επίκλιση αυτή τη στιγμή τομής αγγίζει σε μια προβολή χάρτη, μπορείτε να δοκιμάσετε layering ένα αδιαφανές άποψη εκεί και να δούμε αν παίρνει πινελιές ...

Απαντήθηκε 14/08/2009 στις 03:59
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more