MKMapView не вызывает regionDidChangeAnimated on Pan - PullRequest
6 голосов
/ 03 февраля 2012

У меня есть приложение с MKMapView и кодом, который вызывается каждый раз, когда карта меняет местоположение (в regionDidChangeAnimated). Когда приложение первоначально загружается, regionDidChangeAnimated вызывается на панелях (смахивании), пинчах, касаниях и кнопках, которые явно обновляют координаты карты. После загрузки других видов и возврата на карту regionDidChangeAnimated вызывается только для касаний и кнопок, которые явно обновляют карту. Панорамирование карты и пинчей больше не вызывает regionDidChangeAnimated.

Я посмотрел этот стековый пост , который не решил эту проблему. Сообщения на форуме devforums и iphonedevsdk также не работали. Кто-нибудь знает, что вызывает эту проблему? Я не добавляю никаких подпредставлений в MKMapView.

1 Ответ

3 голосов
/ 14 февраля 2012

Первоначально я не хотел делать это таким образом, но, похоже, до сих пор он работал без проблем (взято из данного сообщения devforums):

Добавьте UIGestureRecognizerDelegate в свой заголовок. Теперь добавьте проверку номера версии ... Если мы на iOS 4, мы можем сделать это:

 if (NSFoundationVersionNumber >= 678.58){

      UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchGestureCaptured:)];
      pinch.delegate = self;          
      [mapView addGestureRecognizer:pinch];

      [pinch release];

      UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureCaptured:)];
      pan.delegate = self;
      [mapView addGestureRecognizer:pan];

      [pan release];
 }

Добавить методы делегата для обработки жестов:

#pragma mark -
#pragma mark Gesture Recognizers

- (void)pinchGestureCaptured:(UIPinchGestureRecognizer*)gesture{
    if(UIGestureRecognizerStateEnded == gesture.state){
         ///////////////////[self doWhatYouWouldDoInRegionDidChangeAnimated];
    }
}

- (void)panGestureCaptured:(UIPanGestureRecognizer*)gesture{

    if(UIGestureRecognizerStateEnded == gesture.state){
        ///////////////////[self doWhatYouWouldDoInRegionDidChangeAnimated];
    }
}

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

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:   (UITouch *)touch{
    return YES;
}

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