Ios 使用MMDrawerController时,使谷歌地图保持其位置
我正在我的项目中使用MMDrawerController和GoogleMap的api。 我想要一个谷歌地图的视图,它有两个左右滑动的导航条,它们只有在我分别从左到右在20px范围内滑动时才会出现。Ios 使用MMDrawerController时,使谷歌地图保持其位置,ios,objective-c,uiviewcontroller,uinavigationcontroller,Ios,Objective C,Uiviewcontroller,Uinavigationcontroller,我正在我的项目中使用MMDrawerController和GoogleMap的api。 我想要一个谷歌地图的视图,它有两个左右滑动的导航条,它们只有在我分别从左到右在20px范围内滑动时才会出现。 一切正常,除了: 当我用属性在mapView的benzel(20px)上滑动时: [drawerController setOpenDrawerGestureModeMask:MMOpenDrawerGestureModeBezelPanningCenterView]; 它还使谷歌地图的视图对平移手
一切正常,除了: 当我用属性在mapView的benzel(20px)上滑动时:
[drawerController
setOpenDrawerGestureModeMask:MMOpenDrawerGestureModeBezelPanningCenterView];
它还使谷歌地图的视图对平移手势做出响应,并使其滑动
亲密的姿态
[drawerController setCloseDrawerGestureModeMask:MMCloseDrawerGestureModeAll];
适合于
[drawerController
setCenterHiddenInteractionMode:MMDrawerOpenCenterInteractionModeNone];
我怎样才能使地图在从抽屉中滑出时保持静止
谢谢大家!
--------------
回答:(stackoverflow不让我回答我的问题,因为它是在8小时前发布的)
我找到了解决办法。功劳归于我。我只是修改了他的一些代码
- (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;
}
注意:因此手势识别器:应与手势识别器同时识别:
将可用
20和40表示视图的左侧和右侧区域。如果平移的起始位置在这些区域内,则地图不会移动。
如果你只想留下:把它们改成20和20。
如果希望它们更小,如10和20,请记住更改
CGFloat const MMDrawerBezelRange=20.0f代码>(默认值)在MMDrawerController.m到10之间。我发现了一个更优雅的解决方案,只需将UIgestureRecognitors绑定在一起,抽屉的平移手势就可以取代地图的平移手势:
// 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;
}
}