我正在构建一个iOS应用程序。我有一个UIWebView作为子视图添加到self.view,然后另一个视图,即mapView,添加为Web视图的子视图。但是mapView被发送到webView的后面。 webView的背景是透明的,以便人们可以看到地图。 看到代码:
[self.webView addSubview: self.mapView];
[self.webView sendSubviewToBack: self.mapView];
我想要做的就是将webView的手势传递给mapView,以便用户可以拖动地图。
我已将webView和mapView的cancelsTouchesInView属性标记为NO。
我为webView添加了一个手势识别器。选择器确实被调用。但是我接下来要做什么呢?
self.webPanGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action: @selector(handleWebPanGesture:)];
[self.webView addGestureRecognizer: self.webPanGesture];
我在webView选择器中调用了gestureRecognizerShouldBegin方法,但它没有工作。
- ( void ) handleWebPanGesture: ( UIPanGestureRecognizer *)gesture
{
NSLog(@"WebPanGesture recognizer called!");
[self.mapView gestureRecognizerShouldBegin: gesture];
[self panAction: gesture];
self.mapPanGesture = gesture; // the mapPanGesture property is the Gesture recognizer for the map
}
我也称这个功能为
- ( IBAction )panAction:(UIPanGestureRecognizer *)sender {
NSLog(@"panAction called!");
CGPoint move = [sender translationInView:self.webView];
CGPoint newCenter = subViewCenter;
newCenter.x += move.x; newCenter.y += move.y;
self.myMapView.mapView.center = newCenter;
}
但它并没有使地图可以拖动,它只是移动它。
self.mapPanGesture = gesture //doesn't work as well.
如何将动作定位到mapView,以便在webView上拖动时拖动地图?
答案 0 :(得分:0)
我确定你应该在mapView上使用叠加层( MKOverlay )来显示地图上的内容。因为这是实现您所需要的更简单的方法。
答案 1 :(得分:0)
我在这里找到了解决方法,所以请查看此link可能会有所帮助。
简而言之,webView不处理touchBegan方法,所以你需要继承它,并且触摸开始方法你可以传递以下内容,
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"%@",event);
[super touchesBegan:touches withEvent:event];
[_mapView touchesBegan:touches withEvent:event];
}
或查看以下方法,
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView *hitView = [super hitTest:point withEvent:event];
// If the hitView is THIS view, return the view that you want to receive the touch instead:
if (hitView == self) {
return otherView;
}
// Else return the hitView (as it could be one of this view's buttons):
return hitView;
}
以上hitTest是参考此link。
希望,这些信息对你有用。