我有一个UIView的子类,它允许用户点击它并在userTrackingMode
上更改属性MKMapView
( MKUserTrackingMode )的状态。
将其视为MKUserTrackingBarButtonItem
的原生UIBarButtonItem
。
行为必须相同:
userTrackingMode
的更改绘制或使用不同的形状。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解决方案的完整代码也许有另一种解决方案?
让我知道:)。