Добавьте выноски к пользовательским реализациям infoMarkerWindow для GMSMapview.

Я использую Google IOS SDK и реализовал

- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker

для реализации пользовательского представления. Когда я показываю этот вид, он не добавляет выноску, как обычно делает вид карты Google для своих собственных маркеров. Может ли кто-нибудь сообщить мне, как можно было бы добавить эту выноску, например указатель, указывающий на маркер для этого пользовательского makerInfoWindow?


person DrBug    schedule 14.07.2013    source источник


Ответы (2)


Вот как это сделать.

- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker{
    int popupWidth = 300;
    int contentWidth = 280;
    int contentHeight = 140;
    int contentPad = 10;
    int popupHeight = 200;
    int popupBottomPadding = 16;
    int popupContentHeight = contentHeight - popupBottomPadding;
    int buttonHeight = 30;
    int anchorSize = 20;
    CLLocationCoordinate2D anchor = marker.position;
    CGPoint point = [mapView.projection pointForCoordinate:anchor];


    UIView *outerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, popupWidth, popupHeight)];
    float offSet = anchorSize * M_SQRT2;
    CGAffineTransform rotateBy45Degrees = CGAffineTransformMakeRotation(M_PI_4); //rotate by 45 degrees
    UIView *callOut = [[UIView alloc] initWithFrame:CGRectMake((popupWidth - offSet)/2.0, popupHeight - offSet, anchorSize, anchorSize)];
    callOut.transform = rotateBy45Degrees;
    callOut.backgroundColor = [UIColor blackColor];
    [outerView addSubview:callOut];

    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, popupWidth, 190)];
    [view setBackgroundColor:[UIColor whiteColor]];

    view.layer.cornerRadius = 5;
    view.layer.masksToBounds = YES;

    view.layer.borderColor = [UIColor blackColor].CGColor;
    view.layer.borderWidth = 2.0f;



    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(contentPad, 0, contentWidth, 22)];
    [titleLabel setFont:[UIFont systemFontOfSize:17.0]];
    titleLabel.text = [marker title];

    UILabel *descriptionLabel = [[UILabel alloc] initWithFrame:CGRectMake(contentPad, 24, contentWidth, 80)];
    [descriptionLabel setFont:[UIFont systemFontOfSize:12.0]];
    descriptionLabel.numberOfLines = 5;
    descriptionLabel.text = [marker snippet];

    [view addSubview:titleLabel];
    [view addSubview:descriptionLabel];


    [outerView addSubview:view];

    return outerView;

}
person DrBug    schedule 15.07.2013

Этот метод является методом GMSMapViewDelegate, вы установили делегата для контроллера представления?

mapView.delegate = self;
person Jing    schedule 14.07.2013
comment
Да, он показывает пользовательский вид, но мой вопрос в том, как показать маленький маркер выноски, который Google показывает для своего собственного маркера... - person DrBug; 15.07.2013
comment
У вас есть скриншот того, о чем вы говорили? Я немного смущен маркером выноски, о котором вы говорите. И, может быть, вам лучше предоставить код вашего метода makerInforWindow, чтобы мы могли понять, в чем проблема... - person Jing; 15.07.2013
comment
Я разобрался, выложу код. Я говорил о том, чтобы показать этот маленький треугольник внизу, указывающий на маркер, чтобы дать визуальную индикацию того, что это информационное окно принадлежит этому конкретному маркеру. Я создаю небольшое представление с кодом и выполняю аффинное преобразование, чтобы оно выглядело как треугольник внизу. - person DrBug; 15.07.2013