Wie erkenne ich einen einzigen Druck auf eine Instanz MKMapView? Muss ich Unterklasse MKMapViewund dann setzen die Zuweisung touchesEndedMethode?
Vielen Dank,
-Chris
Wie erkenne ich einen einzigen Druck auf eine Instanz MKMapView? Muss ich Unterklasse MKMapViewund dann setzen die Zuweisung touchesEndedMethode?
Vielen Dank,
-Chris
Wenn Sie gerade Gelegenheit zum Leitungs Gesten mitgeteilt , ohne dass einer der anderen Berührungsverhalten der Karte zu beeinflussen, sollten Sie ein verwenden UITapGestureRecognizer. Es ist super einfach, nur in einigen Code so sagen.
UITapGestureRecognizer* tapRec = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(didTapMap:)];
[theMKMapView addGestureRecognizer:tapRec];
[tapRec release];
Das wird der Anruf , didTapMapwenn theMKMapViewerhält eine Tippgeste und all das Einklemmen und Ziehen Gesten noch funktioniert wie zuvor.
Hoffe , dass dies helfen wird: Wie berührt Ereignisse auf einem MKMapView oder UIWebView Objekte abfangen?
Funktionierend auf 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 ...
}
Oder je nachdem , was Sie versuchen , eine zu tun, fügen Sie MKAnnotation(Push - Pin, mit einem Richtungsanzeiger), so haben Sie etwas tippen auf - und dann Karte Delegat ein Ereignis zB erhalten.
mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
my 2 cents für 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()
}
}
}
Es klappt. aber ehrlich gesagt kann brechen, wenn Apfelschichten Ansichten ändern. Besser einen Erkenner.
Nichts, was ich gefunden jemals gearbeitet, aber ich kam mit dieser unperfect Lösung: In viewDidLoad
let singleTapRecognizer = UITapGestureRecognizer(target: self, action: #selector(onMapClicked))
singleTapRecognizer.delegate = self
mapView.addGestureRecognizer(singleTapRecognizer)
In Delegierten:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
return touch.view!.frame.equalTo(mapView.frame)
}
einigen Code-Schnipsel als Illustration von @ tt-kilew Antwort einfach hinzufügen. In meinem Fall möchte ich den Benutzer selbst auf der Karte zeigen, wollen aber nicht seine Drag Kontakt zu unterbrechen.
@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
Sie kann nicht zu diesem Zeitpunkt Intercept auf einer Karte berührt, können Sie dort Schichtung eine undurchsichtige Ansicht versuchen und sehen, ob es berührt nimmt ...