在Swift中听MKMapView上的userTrackingMode更改

时间:2016-05-31 08:18:23

标签: ios swift uiview mkmapview key-value-observing

我有一个UIView的子类,它允许用户点击它并在userTrackingMode上更改属性MKMapView MKUserTrackingMode )的状态。

将其视为MKUserTrackingBarButtonItem的原生UIBarButtonItem。 行为必须相同:

  • 视图将根据userTrackingMode的更改绘制或使用不同的形状。
  • 当我点击UIView时,该属性将在:
  • 之间切换
MKUserTrackingModeNone
MKUserTrackingModeFollow
MKUserTrackingModeFollowWithHeading

到目前为止,一切都很简单,但这是真正的问题所在:

只要用户在地图中移动,就可以更改userTrackingMode。似乎没有办法在不做一些非常丑陋的黑客攻击的情况下听取swift中的变化。

以下是我的搜索:

  • MKMapView代表:特别是这个(didChangeUserTrackingMode)。完美适合,但不能使用它因为我需要mapView委托其他(例如在viewController中)。

  • KVO
    mapView?.addObserver(self, forKeyPath: "userTrackingMode", options: [.New,.Old], context: nil)
    似乎不可能因为属性是枚举(int),它不是NSObject,所以不可能听取更改......除非我完全不理解kvo。

以下是尝试在gist

上使用KVO解决方案的完整代码

也许有另一种解决方案?

让我知道:)。

0 个答案:

没有答案