2013-11-26 16 views
1

我在我的項目中使用MMDrawerController和GoogleMap的api。 我想要一個帶有兩個左右滑出導航欄的GoogleMap視圖,它們僅在分別從左側和右側20px內滑動時出現。
一切正常,除了: 當我刷上benzel,這是20像素,MapView類的財產:使GoogleMap在使用MMDrawerController時保持其位置

[drawerController 
setOpenDrawerGestureModeMask:MMOpenDrawerGestureModeBezelPanningCenterView]; 

這也使得的GoogleMap的觀點響應平移手勢太,並使其揮筆遠。

緊密手勢

[drawerController setCloseDrawerGestureModeMask:MMCloseDrawerGestureModeAll]; 

[drawerController 
setCenterHiddenInteractionMode:MMDrawerOpenCenterInteractionModeNone]; 

我怎樣才能讓滑出抽屜時,地圖上仍然保持正常工作?

謝謝!

----------------

(計算器不讓我回答我的問題,因爲它是小於8小時前發佈)

我找到了解決方案。積分爲https://github.com/kcharwood。我只是修改他的一些代碼。

- (void)viewDidLoad 
{ 
self.view = _mapView; 

    [[self.view.subviews[0] gestureRecognizers] enumerateObjectsUsingBlock:^(UIGestureRecognizer * gesture, NSUInteger idx, BOOL *stop){ 
     [gesture setDelegate:self]; 
    }]; 
} 

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ 
    CGPoint location = [touch locationInView:self.view]; 
    CGRect boundingRect = self.view.bounds; 
    if([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]){ 
     boundingRect.origin.x+=20; 
     boundingRect.size.width-=40; 
    } 
    return CGRectContainsPoint(boundingRect, location); 
} 


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

注:堅持如此gestureRecognizer: shouldRecognizeSimultaneouslyWithGestureRecognizer:將可用。

20和40表示視圖的左側和右側區域。如果平移手勢在這些區域內開始位置,則地圖不會移動。 如果只想左:將其更改爲20和20 如果你想他們更小,如10和20,記得在MMDrawerController.m改變CGFloat const MMDrawerBezelRange = 20.0f;(默認值)10

回答

3

我發現了一個更優雅解決方案只需將UIGestureRecognizers捆綁在一起,以便抽屜的平移手勢取代地圖的平移手勢:

// walk the drawer controller's gesture recognizers 
UIGestureRecognizer *drawerPanGestureRecognizer = nil; 
for (UIGestureRecognizer *gestureRecognizer in drawerController.view.gestureRecognizers) { 
    // grab the pan gesture recognizer 
    if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) { 
     drawerPanGestureRecognizer = gestureRecognizer; 
     break; 
    } 
} 

// walk the map view's gesture recognizers 
for (UIGestureRecognizer *gestureRecognizer in ((UIView *)mapView.subviews[0]).gestureRecognizers) { 
    // to find the pan gesture recognizer 
    if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) { 
     // panning the drawer should prevent panning the map view 
     [gestureRecognizer requireGestureRecognizerToFail:drawerPanGestureRecognizer]; 
     break; 
    } 
} 
相關問題