1

そのため、クラスター化ライブラリを使用して注釈をグループ化していますが、小さなバグがあり、マップを完全にズームインすると、非常に接近した注釈がグループ化されて表示されることがあります。これはフレームワークであるため、直接それについて多くを行うことはできませんが、マップが完全に拡大されている場合は、すべてのグループ化を無効にすることができます。問題は、これを行う信頼できる方法を見つけられないことです。

これは理想的には、マップが完全にズームインされているかどうかを確認したいregionDidChangeAnimated場所です(これ以上ズームインできないポイントまで)。

func mapView(mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
    NSOperationQueue().addOperationWithBlock { 
        let scale: Double = Double(self.map.bounds.size.width) / self.map.visibleMapRect.size.width
        let annotations = self.clusteringManager?.clusteredAnnotationsWithinMapRect(self.map.visibleMapRect, withZoomScale: scale)
        self.clusteringManager?.displayAnnotations(annotations, onMapView: self.map)
    }
}

プロパティを調べてみmapView.region.spanましたが、画面サイズなどによって変わると思います...

助言がありますか?前もって感謝します。

4

1 に答える 1

1

MKMapView を拡張する必要があります。

class YourMapView : MKMapView {

    // function returns current zoom level of the map

    func getCurrentZoom() -> Double {

        var angleCamera = self.camera.heading
        if angleCamera > 270 {
            angleCamera = 360 - angleCamera
        } else if angleCamera > 90 {
            angleCamera = fabs(angleCamera - 180)
        }

        let angleRad = M_PI * angleCamera / 180 

        let width = Double(self.frame.size.width)
        let height = Double(self.frame.size.height)

        let offset : Double = 20 // offset of Windows (StatusBar)
        let spanStraight = width * self.region.span.longitudeDelta / (width * cos(angleRad) + (height - offset) * sin(angleRad))
        return log2(360 * ((width / 256) / spanStraight)) + 1;
      }

}

次のデリゲート メソッドで現在のズーム レベルを読み取ることができるようになりました。

regionDidChangeAnimated

regionWillChangeAnimated
于 2016-09-28T11:13:49.050 に答える