2015-07-03 3 views
0

В моем представлении карты я использую длинный жест нажатия, чтобы нарисовать MKCircle на карте. Я бы хотел использовать двойной жест, чтобы удалить круг. Я добавляю двойной кран в качестве распознавателя жестов, и он работает правильно, однако, в то время как он удаляет круг, он также масштабирует бит каждый раз. Мне интересно, есть ли способ удалить масштаб по умолчанию двойным нажатием, оставив только мой собственный? Я не хочу отключать масштабирование всей карты только при двойном нажатии.MapView - отключить Doubletap Zoom

UILongPressGestureRecognizer *longGesture = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(getMapCoordinateFromTouch:)]; 
    [self.mapView addGestureRecognizer:longGesture ]; 

    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(removeBoundary:)]; 
    [tapGesture setNumberOfTapsRequired:2]; 
    [tapGesture setNumberOfTouchesRequired:1]; 
    tapGesture.delegate = self; 
    [self.mapView addGestureRecognizer:tapGesture]; 

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    return YES; 
} 

-(void)removeBoundary:(UITapGestureRecognizer *)gesture 
{ 
    [self.mapView removeOverlays:self.mapView.overlays]; 
} 

Дополнительная информация:

Было высказано предположение о том, что этот вопрос был похож на: Disable double tap zoom in MKMapView (iOS 6)

Однако, этот человек пытается отключить все двойные отводы, а не только по умолчанию. Я нашел код в этом вопросе, который, как я думал, может помочь здесь, но это не так. В этом потоке было указано, что вы можете прокрутить карту и удалить распознаватель жестов. Это, похоже, работает для распознавателей жестов, которые я могу добавить, но он не находит ни одного поведения Apple по умолчанию. Я запускаю следующий код после viewWillAppear (я также пробовал viewDidAppear), но точка останова показывает, что «жесты» равны нулю. Поэтому по какой-то причине в представлении нет жесты Apple по умолчанию.

NSArray *gestures = [self.mapView gestureRecognizers]; 
    for (UIGestureRecognizer *recognizer in gestures) 
    { 
     if ([recognizer isKindOfClass:[UITapGestureRecognizer class]]) 
     { 
      UITapGestureRecognizer *tap = (UITapGestureRecognizer *)recognizer; 
      if (tap.numberOfTapsRequired == 2) 
       [self.mapView removeGestureRecognizer:recognizer]; 
     } 
    } 
+0

возможного дубликат [Отключить двойное нажатие увеличить в MKMapView (iOS 6)] (http://stackoverflow.com/questions/12521017/disable-double-tap-zoom-in-mkmapview-ios-6) –

+0

Я объясняю как править выше, почему вопрос отличается от связанная версия. – C6Silver

ответ

0

Попробуйте возвращение NO из -gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:. Похоже, что и ваш распознаватель, и распознаватель карты видят действие двойным нажатием. Вы действительно хотите, чтобы ваша первая трещина на жесте, поэтому она может эффективно переопределить вид карты.

+0

Я пробовал это, но он фактически останавливает мою стрельбу, сохраняя поведение по умолчанию, – C6Silver

+0

Возможно, лучше всего установить «zoomEnabled» на «NO», а затем добавить собственные фиксаторы и щепки для настройки масштабирования. Если это сработает, это даст вам контроль над тем, когда масштабируются два раза, а когда нет. – Caleb

+0

Это может сработать, но, похоже, много работы по воссозданию всего поведения карты просто для удаления двойного крана. Я надеялся, что существует более хирургический способ удалить поведение двойного нажатия по умолчанию. – C6Silver

0

По умолчанию UIGestureRecognizers появляется быть добавлено к первому подвиду, просто удалите их:

Примера, чтобы удалить все UITapGestureRecognizers (перейти от 13 до 9)

print("GestureRecognizers before \(mainMap.subviews[0].gestureRecognizers?.count)") if (mainMap.subviews[0].gestureRecognizers != nil){ for gesture in mainMap.subviews[0].gestureRecognizers!{ if (gesture.isKindOfClass(UITapGestureRecognizer)){ mainMap.subviews[0].removeGestureRecognizer(gesture) } } } print("GestureRecognizers after \(mainMap.subviews[0].gestureRecognizers?.count)")

Смежные вопросы