iPhone: Обнаружение Нажмите на MKMapView

голоса
19

Как обнаружить один кран на экземпляре MKMapView? У меня есть подкласс , MKMapViewа затем переопределить touchesEndedметод?

Благодаря,

-Крис

Задан 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

Работа Прекрасно КСН 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 цента за Świt 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

Ничего я никогда не нашел обработанный, но я пришел с этим unperfect раствором: В 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

Вы наклоняете в это время перехватывать затрагивает вид карты, вы можете попробовать отводками непрозрачного вида там и посмотреть, если он поднимает прикосновения ...

Ответил 14/08/2009 в 03:59
источник пользователем

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