2014-09-16 6 views
0

Я создаю приложение для iOS. У меня есть UIWebView, который добавляется как subview в self.view, затем другой вид, который является mapView, добавляется как подзаголовок веб-представления. Но mapView отправляется обратно в webView. Фон webView прозрачен, чтобы можно было видеть карту. см код:Передача PanGesture в подвью

[self.webView addSubview: self.mapView]; 
[self.webView sendSubviewToBack: self.mapView]; 

Ну, что я пытаюсь сделать, это передать жесты WebView к MAPview так, что пользователь может перетаскивать карту.

Я пометил свойство cancelsTouchesInView для NO как для webView, так и для mapView.

Я добавил распознаватель жестов для webView. Селектор действительно вызван. Но что я должен делать дальше?

self.webPanGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action: @selector(handleWebPanGesture:)]; 

    [self.webView addGestureRecognizer: self.webPanGesture]; 

я назвал метод gestureRecognizerShouldBegin в селекторе Webview, но он не работает.

- (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

Но какова ваша цель? Почему карта за веб-просмотром? Чего вы пытаетесь достичь? – nikhil84

+0

проблема заключается в том, что есть элементы html, которые должны быть над картой, поэтому я отправляю карту внизу. – nikozavar

+1

Хорошо, но в конце вы можете показать как отдельно, так и друг за другом. – nikhil84

ответ

0

Я уверен, что вы должны использовать накладки (MKOverlay) на картеПросмотреть, чтобы показать содержание на карте. Потому что это гораздо более простой способ добиться того, что вам нужно.

Пожалуйста, прочтите этот Adding Annotations to a Map

+0

это не о наложениях. Он не может применить/передать жест, который был применен в webView. Поэтому, когда mapView не может получить контроль, тогда нет хорошего наложения. – nikhil84

+0

Я про решение в целом. – sage444

0

Здесь я нашел способ обойти так что проверить это link может быть полезным.

Короче говоря, WebView не обрабатывает метод touchBegan так и нужно подкласс, что и в касание начал метод U может передать следующее,

-(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.

Надеюсь, эта информация полезна для u.