Come posso aggiungere un pulsante di google maps marcatore finestra di info su ios?

Ho aggiunto Google maps sdk per ios per il mio Iphone app, e ho alcuni indicatori personalizzati se cliccato info compare la finestra con titolo, come faccio ad aggiungere un pulsante questa finestra info, quindi se premuto vai alla nuova pagina??? Ora ho provato a usare questo post per risolvere questo problema L’aggiunta di Evento Click sul InfoWindow/Marcatore in Google Maps SDK nativo per iOS/objective C non mi da errore ma non funziona.

questo è ciò che io voglio che il mio risultato:http://www.flickr.com/photos/[email protected]/6728157477/

InformationsquelleAutor user1810991 | 2013-03-21

4 Replies
  1. 8

    La risposta per la domanda che hai collegato indica il codice per l’utilizzo MapKit, quindi non funziona con Google Maps SDK per iOS.

    Vedere questa domanda per sapere come fare per tornare a una visualizzazione personalizzata con Google Maps SDK per iOS:

    Annotazioni personalizzate view in Google Maps SDK

    Tuttavia notare che, in base a questa domanda, sembra che quello che viene visualizzato potrebbe essere un visual copia di vista non si vista attuale, che potrebbe limitare l’interazione che si può fare con la vista:

    Aggiungere pulsanti per visualizzare restituito da markerInfoWindow delegato metodo

    Semplicemente rilevare un colpetto sulla finestra di informazioni e di andare a una pagina diversa, dovrebbe essere possibile con il didTapWindowOfMarker però.

    Nota che c’è una richiesta di funzionalità in Google issue tracker per aggiungere il supporto diretto per questo:

    https://code.google.com/p/gmaps-api-issues/issues/detail?id=4961

    Questo è quello che ho usato: – (void)mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(id<GMSMarker>)marcatore { [self performSegueWithIdentifier:@”ViewController” mittente:[marcatore snippet]]; } non è una buona soluzione per sostituire un pulsante, ma funziona! GRAZIE
    User1810991, ho provato a usare il performSegueWithIdentifier: soluzione, ma ricevo un errore. Che cosa fa esattamente l’identificatore (il primo parametro) devono corrispondere a? Ho fatto la corrispondenza contenente view controller e che non ha funzionato
    Ciao Charlie, è il nome dell’segue – clicca il collegamento (la linea di collegamento sul vostro storyboard) e quindi impostare il suo identificatore.

    InformationsquelleAutor Saxon Druce

  2. 5

    Questo codice fa esattamente quello che vuoi. E ‘ ispirato a #9 link raccomandato da Sassone Druce, ma fatto in modo diverso e più completo. Rileva toccare aggiunti i pulsanti per la mia custom infoWindow. Ho creato un custom infoWindow con 2 falsi pulsanti (potrebbe in realtà essere sostituito da immagini, perché non innescare qualsiasi azione, comunque) e ho aggiunto un trasparente UIView con 2 reale, ma trasparente pulsanti sopra la infoWindow. Questi pulsanti attivano le azioni.

    Infine, io uso un paio di metodi delegati o KVC per spostare il sovrapposti UIView quando il infoWindow stesso si muove.

    - (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker {
        [self.actionOverlayCalloutView removeFromSuperview];
        UIView *calloutView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, infoWindowWidth, infoWindowHeight)];
    
        float offset = anchorSize * M_SQRT2;
        CGAffineTransform rotateBy45Degrees = CGAffineTransformMakeRotation(M_PI_4);
        UIView *arrow = [[UIView alloc] initWithFrame:CGRectMake((infoWindowWidth - anchorSize)/2.0, infoWindowHeight - offset, anchorSize, anchorSize)];
        arrow.transform = rotateBy45Degrees;
        arrow.backgroundColor = [UIColor lightGrayColor];
        [calloutView addSubview:arrow];
    
        UIView *contentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, infoWindowWidth, infoWindowHeight - offset/2)];
        [contentView setBackgroundColor:[UIColor whiteColor]];
    
        contentView.layer.cornerRadius = 5;
        contentView.layer.masksToBounds = YES;
    
        contentView.layer.borderColor = [UIColor lightGrayColor].CGColor;
        contentView.layer.borderWidth = 1.0f;
    
        self.actionOverlayCalloutView =
        [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:contentView]]; //hack to copy a view...
        self.actionOverlayCalloutView.backgroundColor = [UIColor lightGrayColorWithAlpha:0.5];
        self.actionOverlayCalloutView.layer.cornerRadius = 5;
        NSMutableArray *falseButtons = [NSMutableArray array];
        NSMutableArray *actionButtons = [NSMutableArray array];
        PointMapItem *pointAnnotation = marker.userData;
        if ([pointAnnotation canPerformSend]) {
            UIButton *button = [[UIButton alloc] init];
            [button setImage:[UIImage imageNamed:@"imageButton1.png"] forState:UIControlStateNormal];
            [falseButtons addObject:button];
            UIButton *activableButton = [[UIButton alloc] init];
            [activableButton addTarget:self action:@selector(onButton1Clicked) forControlEvents:UIControlEventTouchUpInside];
            [actionButtons addObject:activableButton];
        }
        if ([pointAnnotation canPerformShowDetails]) {
            UIButton *button = [[UIButton alloc] init];
            [button setImage:[UIImage imageNamed:@"imageButton1.png"] forState:UIControlStateNormal];
            [falseButtons addObject:button];
            UIButton *activableButton = [[UIButton alloc] init];
            [activableButton addTarget:self action:@selector(onButton2Clicked) forControlEvents:UIControlEventTouchUpInside];
            [actionButtons addObject:activableButton];
        }
        int buttonWidth = contentView.frame.size.width / [falseButtons count];
        int currentOffset = 0;
        for (int i=0; i<falseButtons.count; i++) {
            UIButton *falseButton = [falseButtons objectAtIndex:i];
            UIButton *activableButton = [actionButtons objectAtIndex:i];
            [falseButton setFrame:CGRectMake(currentOffset, 0, buttonWidth, contentView.frame.size.height)];
            currentOffset += buttonWidth;
            activableButton.frame = falseButton.frame;
            [activableButton setTitle:@"" forState:UIControlStateNormal];
            [self.actionOverlayCalloutView addSubview:activableButton];
            [contentView addSubview:falseButton];
        }
        [calloutView addSubview:contentView];
    
        CLLocationCoordinate2D anchor = [self.mapView.selectedMarker position];
        CGPoint point = [self.mapView.projection pointForCoordinate:anchor];
        point.y -= self.mapView.selectedMarker.icon.size.height + offset/2 + (infoWindowHeight - offset/2)/2;
        self.actionOverlayCalloutView.center = point;
    
        [self.mapView addSubview:self.actionOverlayCalloutView];
        return calloutView;
    }
    
    - (void)mapView:(GMSMapView *)pMapView didChangeCameraPosition:(GMSCameraPosition *)position {
        if (pMapView.selectedMarker != nil && self.actionOverlayCalloutView.superview) {
            CLLocationCoordinate2D anchor = [self.mapView.selectedMarker position];
            CGPoint point = [self.mapView.projection pointForCoordinate:anchor];
            float offset = anchorSize * M_SQRT2;
            point.y -= self.mapView.selectedMarker.icon.size.height + offset/2 + (infoWindowHeight - offset/2)/2;
            self.actionOverlayCalloutView.center = point;
        } else {
            [self.actionOverlayCalloutView removeFromSuperview];
        }
    }
    
    - (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate {
        [self.actionOverlayCalloutView removeFromSuperview];
    }
    
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
        if ([keyPath isEqualToString:@"mapView.selectedMarker"]) {
            if (!self.mapView.selectedMarker) {
                [self.actionOverlayCalloutView removeFromSuperview];
            }
        }
    }
    
    - (void)onButton2Clicked {
        //your code
        self.mapView.selectedMarker = nil;
    }
    
    - (void)onButton1Clicked {
        //your code;
        self.mapView.selectedMarker = nil;
    }
    può descrivere su PointMapItem. Riesco a capire dal tuo codice di esempio.

    InformationsquelleAutor Aurelien Porte

  3. 0

    1)Creare una sottoview che si desidera visualizzare in infoWindow.
    2)Impostare il frame di sottoview uguale al telaio del infoWindow vista.

      subView =  [[[NSBundle mainBundle] loadNibNamed:@"viewName" owner:self options:nil] objectAtIndex:0];
      [subView setFrame:infoview.frame];
      [self.mapview addSubview:subView];

    InformationsquelleAutor Dhananjay Patil

Lascia un commento