2014-02-28 50 views
2

我目前正在研究地圖功能(大部分代碼是由其他人爲此功能開發的)。MKMapView覆蓋圖在縮放操作後沒有清晰地繪製

我們通過設置mkpolygon對象的數組來添加mkoverlays到地圖。這些對象通過從後端接收到的jSon接收它們的多邊形座標。據我檢查代碼,我們並不是重寫繪製方法。對象只能用它們的多邊形初始化並添加到mapView中。

我們通過這種方式增加線和麪的圖,現在有兩種行爲不屬於不錯:

1)如果多邊形覆蓋被觸摸,它們的顏色應該改變 - >但它非常非常2)如果地圖放大/縮小,線條非常像並且不銳利 - 看起來很蹩腳

我的問題是,整個方法在這個用例中是錯誤的嗎?

+0

也有這兩個問題。據我所知,整個地圖重繪,如果重疊渲染器設置爲需要顯示。渲染器被要求在界限之外繪製。仍在調查。 –

回答

0

我們的基於地圖的應用程序也具有非常緩慢的疊加渲染和(間歇)邊緣過度模糊。

好消息是,我找到了一個解決方案,看起來像是一個bug,導致性能提高了300%。我注意到渲染器被反覆要求在覆蓋範圍之外繪製。所以,我只是增加了一個界限檢查,我MKPolygonRenderer子類的這樣的繪製方法:

- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context 
{ 
    if (!MKMapRectIntersectsRect([self.overlay boundingMapRect], mapRect)) { 
     return; 
    } 
    [super drawMapRect:mapRect zoomScale:zoomScale inContext:context]; 
} 

隨着這一變化,我們從不到1提高每秒重繪每秒2個或3重繪。

+0

self.overlay包含什麼,它只是1覆蓋?什麼是我們有一個覆蓋數組ID?另外,誰調用drawMapRect?謝謝! –

+0

@VanDuTran這些是Apple的'MKOverlayRenderer'類的API,所以我不確定我是否理解這個問題。 'overlay'屬性的類型爲'id '。所以,不,它不是一個數組。並且'drawMapRect'被內部Apple代碼調用。你可以看看[示例項目](https://dl.dropboxusercontent.com/u/2183704/Map%20Overlay%20Pared%20Down.zip)我發送了蘋果,如果它有幫助 –

+0

我的意思是,當API是否刷新重疊?什麼時候調用「rendererForOverlays」?我沒有得到drawMapRect和rendererForOverlay之間的關係 –