将标注添加到GMSMapview的自定义infoMarkerWindow实现

时间:2013-07-14 01:29:31

标签: uiview google-maps-sdk-ios

我正在使用Google IOS SDK并已实施

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

实现自定义视图。当我显示此视图时,它不会添加标注,因为Google地图视图通常会为其自己的标记添加。任何人都可以让我知道如何添加这个标注像指针指向这个自定义makerInfoWindow的标记?

2 个答案:

答案 0 :(得分:5)

以下是如何做到的。

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

}

答案 1 :(得分:0)

此方法是GMSMapViewDelegate方法,您是否将委托设置为视图控制器?

mapView.delegate = self;