2016-10-25 26 views
9

MKPolyline'ın bu garip render davranışını göstermek için çok basit bir View Controller var. Özel bir şey değil sadece normal API çağırır.MKPolyline garip görüntü oluşturma ile yakınlaştırma MapKit

import UIKit 
import MapKit 

class ViewController: UIViewController, MKMapViewDelegate { 

    @IBOutlet weak var map: MKMapView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     map.delegate = self 
    } 

    override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 
     let p1 = CLLocationCoordinate2D(latitude: 51, longitude: 13) 
     var coords = [ 
      p1, 
      CLLocationCoordinate2D(latitude: 51.1, longitude: 13), 
      CLLocationCoordinate2D(latitude: 51.2, longitude: 13), 
      CLLocationCoordinate2D(latitude: 51.3, longitude: 13) 
     ] 

     let polyline = MKPolyline(coordinates: &coords, count: coords.count) 
     map.addOverlays([polyline], level: .aboveRoads) 
     let cam = MKMapCamera(lookingAtCenter: p1, fromDistance: 1000, pitch: 45, heading: 0) 
     map.setCamera(cam, animated: true) 
    } 

    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer { 
     let r = MKPolylineRenderer(overlay: overlay) 
     r.strokeColor = UIColor.blue 
     return r 
    } 
} 

Çoklu çizginin oluşturulması çok garip. Yakınlaştırma ve kaydırma sırasında bazı eserler görebilirsiniz. Bazı uzaklaştırma sonra After some panning

kaydırma ve After zooming out and zooming in again

Bu nasıl düzeltmek için tekrar yakınlaştırarak sonra

Başlangıç ​​Ekranı Initial Screen

:

Aşağıdaki resimlerde bir göz atın? Kendi rendererimi uygulamaya çalışıyordum ama aynı durum. Overaly gibi önbelleğe alınır ve zamanında yeniden çizilmez. Ben iOS 10, iPhone 6, iOS SDK 10 Xcode gelen Simülatörü üzerinde çalışıyorum 8.

+0

Bu cevaba bakın http://stackoverflow.com/questions/20601768/mkpolylinerenderer-produces-jagged-unequal-paths – doogi

+0

Aynı sorunu yaşadım ve bunu düzeltdim: http://stackoverflow.com/questions/40087736/ios- 10-mapkit-önceki katman-zoom-issue – fatinho

+0

Bu sorun için uygun bir çözüm yok ve çözüm bulamadı. başka birisi ? – Kumar

cevap

3

Swift 3 çözeltisi:

Sonra MKPolylineRenderer

bir alt sınıfını
class CustomPolyline: MKPolylineRenderer { 

    override func applyStrokeProperties(to context: CGContext, atZoomScale zoomScale: MKZoomScale) { 
     super.applyStrokeProperties(to: context, atZoomScale: zoomScale) 
     UIGraphicsPushContext(context) 
     if let ctx = UIGraphicsGetCurrentContext() { 
      ctx.setLineWidth(self.lineWidth) 
     } 
    } 
} 

oluşturma rendererFor MapKit kullanmak delege:

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer { 
     let renderer = CustomPolyline(overlay: overlay) 
     renderer.strokeColor = UIColor.red 
     renderer.lineWidth = 100 
     return renderer 
} 

Sizin devamlı çizgiler eserler böylece yakınlaştırma kaçınarak sonra yeniden işlemek olmaz

+0

Bu aslında çalışıyor. Ancak, renderer.lineWidth öğenizi yüksek bir değere ayarladığınızdan emin olun, aksi takdirde çoklu çizgiyi görmezsiniz. Özel sınıfınızı ctx.setLineWidth (self.lineWidth * 100) ayarlayarak değiştirdim. Bu şekilde delege yönteminde çok yüksek bir değer ayarlamanız gerekmez. – FredFlinstone

İlgili konular