2011-03-13 54 views
1

我有一個mapView,在我的mapView中,您可以用雙擊,捏,UIButton(+和 - )和UISlider進行縮放。 現在...我想識別doubletap和pinch,刷新UISlider的位置...我使用一個名爲zoomLevel的NSInteger變量來做到這一點。MKMapView上的手勢識別 - iPhone

我已經試過兩路,但不工作:

1)

UIGestureRecognizer *recognizer; 


// taps 
recognizer = [[ UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap)]; 
tapGR = (UITapGestureRecognizer *)recognizer; 
tapGR.numberOfTapsRequired = 2; 
tapGR.cancelsTouchesInView = NO; 
[self.view addGestureRecognizer:tapGR]; 
[recognizer release]; 

2)

- (void)touchesEnded:(NSSet *)touches withEvent: (UIEvent *) event{ 
    UITouch* touch = [[event allTouches] anyObject]; 
    NSLog(@"2 taps"); 
    if(touch.tapCount == 2){ 
     NSLog(@"2 taps"); 
     [self zoomLevelWithMapView:mappa]; 
    } 

有人能幫助我嗎? 更好的實例 謝謝。

回答

1

認識到UIGestureRecognizer變焦比例的變化是一個壞主意。

更好地使用MKMapView委託方法,該方法在地圖視圖顯示的區域即將更改時調用。

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated { 
    // detect zoom scale and update slider 
} 

使用this answer中的方法檢測縮放比例。

+0

好主意......我認爲你的代碼沒問題。我明天會考。 對於縮放比例我研究了特洛伊布蘭特的代碼,我將使用你的算法的反向版本: http://troybrant.net/blog/2010/01/set-the-zoom-level-of -mkmapview/ 剩下的唯一問題是,我不可能爲每個座標自動設置最大縮放級別,因爲最大縮放根據地球的面積而變化... 我會發明一些東西。 再次感謝。 – Byteros 2011-03-13 22:58:27

+0

我不認爲這是一個好主意。這種代表方法和手勢事件之間存在一些延遲,這會使用戶很難使用。 – David 2012-12-10 13:15:56