谷歌地图ios-如何保持标记信息窗口始终显示?

谷歌地图ios-如何保持标记信息窗口始终显示?,ios,objective-c,google-maps,google-maps-sdk-ios,Ios,Objective C,Google Maps,Google Maps Sdk Ios,我正在努力防止信息窗口消失。为了证明我用过 [mapView_ setSelectedMarker:marker]; 但是当用户点击地图的某个地方时,信息窗口消失了。我已尝试将其重新设置为didTapAtCoordinate,但这是在取消选择任何标记之前调用的。怎么做 关键值是这种情况下的设计模式。对我有用 - (void)viewDidLoad { [super viewDidLoad]; self.shouldShowInfoView = NO; [self.mapView a

我正在努力防止信息窗口消失。为了证明我用过

[mapView_ setSelectedMarker:marker];

但是当用户点击地图的某个地方时,信息窗口消失了。我已尝试将其重新设置为
didTapAtCoordinate
,但这是在取消选择任何标记之前调用的。怎么做

关键值是这种情况下的设计模式。对我有用

- (void)viewDidLoad {
  [super viewDidLoad];
  self.shouldShowInfoView = NO;
  [self.mapView addObserver:self
            forKeyPath:@"selectedMarker"
               options:(NSKeyValueObservingOptionNew |
                        NSKeyValueObservingOptionOld)
               context:NULL];
}

- (void)needToShowInfoView {
  self.shouldShowInfoView = YES;
}

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context {

  if ([keyPath isEqual:@"selectedMarker"]) {
    if (self.shouldShowInfoView) {
      if ([[change objectForKey:NSKeyValueChangeNewKey] isKindOfClass:[NSNull class]]) {
        self.mapView.selectedMarker = [change objectForKey:NSKeyValueChangeOldKey];
      }
    }
  }
}

对于希望在Swift 4中测试汉顿解决方案的任何人,请简化为在页面加载后始终显示信息窗口:

override func viewDidLoad() {
    mapView.addObserver(self, forKeyPath: "selectedMarker", options: [.new, .old], context: nil)
}

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if keyPath == "selectedMarker" {
        if change?[.newKey] as? NSObject is NSNull {
            mapView.selectedMarker = change?[.oldKey] as? GMSMarker
        }
    }
}

这确实有效,但当用户点击时,信息窗口会短暂闪烁消失并重新出现。

您能详细说明一下吗?