首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Google地图的自定义信息窗口

Google地图的自定义信息窗口
EN

Stack Overflow用户
提问于 2013-05-25 13:32:04
回答 3查看 44.3K关注 0票数 54

我想为iOS的谷歌地图制作一个自定义的信息窗口,如下图所示。是否可以像GMSMarker、GMSPolyline和GMSPolygon do那样扩展GMSOverlay以创建自定义图形?

EN

回答 3

Stack Overflow用户

发布于 2013-05-27 13:59:08

您需要在设置infoWindowAnchor的同时使用markerInfoWindow委托方法。

创建标记时,请设置锚点:

代码语言:javascript
复制
GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = MARKER_POSITION;
marker.infoWindowAnchor = CGPointMake(0.44f, 0.45f);
marker.icon = [UIImage imageNamed:@"CustomMarkerImageName"];

然后创建委托方法:

代码语言:javascript
复制
- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker {
  InfoWindow *view =  [[[NSBundle mainBundle] loadNibNamed:@"InfoWindow" owner:self options:nil] objectAtIndex:0];
  view.name.text = @"Place Name";
  view.description.text = @"Place description";
  view.phone.text = @"123 456 789";
  view.placeImage.image = [UIImage imageNamed:@"customPlaceImage"];
  view.placeImage.transform = CGAffineTransformMakeRotation(-.08);
  return view;
}

在上面的示例中,我创建了一个xib

然后我加载了xib,返回了结果UIView。相反,您可以仅使用代码来构造UIView

票数 105
EN

Stack Overflow用户

发布于 2013-05-25 15:31:49

您可以将此类型的UIImage作为图标传递,如下所示

代码语言:javascript
复制
 CLLocationCoordinate2D position = CLLocationCoordinate2DMake(latitude,longitude);
 GMSMarker *location = [GMSMarker markerWithPosition:position];
 location.title = @"Location Name";
 location.icon = [UIImage imageNamed:@"marker_icon.png"];
 location.map = mapView_;

有关更多详细信息,请访问see this Documentation

如果你想要这种类型的图像后按下标记,你必须有两种类型的图像的单一场所。

仅第一个图像标记图标。

第二张图片是带有位置细节的标记。

标记图标在mapView初始化时加载,就像上面的代码一样。

第二个带有位置细节的图像标记,你必须使用For-LoopNSMutablearray通过检查marker.title来知道哪个标记被按下,像这样加载内部标记按下的delegate方法。

代码语言:javascript
复制
 - (BOOL)mapView:(GMSMapView *)mapView didTapMarker:(GMSMarker *)marker
 {

 }
票数 3
EN

Stack Overflow用户

发布于 2016-03-29 13:39:07

Swift版本,标记自定义类的示例版本:

代码语言:javascript
复制
class CustomMarker: UIView {

@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var seperator: UIImageView!
@IBOutlet weak var icon: UIImageView!
@IBOutlet weak var descriptionLabel: UILabel!

class func instanceFromNib() -> UIView {
    return UINib(nibName: "CustomMarker", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! UIView
}}

多亏了How to initialise a UIView Class with a xib file in Swift, iOS,你可以向UIView添加扩展,这样你就不需要强制转换了

代码语言:javascript
复制
protocol UIViewLoading {}
extension UIView : UIViewLoading {}

extension UIViewLoading where Self : UIView {

// note that this method returns an instance of type `Self`, rather than UIView
static func loadFromNib() -> Self {
    let nibName = "\(self)".characters.split{$0 == "."}.map(String.init).last!
    let nib = UINib(nibName: nibName, bundle: nil)
    return nib.instantiateWithOwner(self, options: nil).first as! Self
}
}

在你的代理中:

代码语言:javascript
复制
    func mapView(mapView: GMSMapView, markerInfoWindow marker: GMSMarker) -> UIView? {
    let customMarker:CustomMarker = CustomMarker.loadFromNib()
    customMarker.titleLabel.text = marker.title
    customMarker.descriptionLabel.text = marker.snippet

    return customMarker
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16746765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档