MKPolylineRenderer produces jagged, unequal paths

后端 未结 6 737
天涯浪人
天涯浪人 2020-12-17 22:10

I am using the iOS 7 MapKit APIs to produce 3D camera movements on a map that displays an MKDirectionsRequest-produced path. The path is rendered by MKOverlayRenderer like s

6条回答
  •  [愿得一人]
    2020-12-17 22:38

    MKPolyline is not drawing when zoom is changing and when the region is changing. Simple fix below.

    public class PolylineRenderer : MKPolylineRenderer {
    
        private var displayLink: CADisplayLink!
        private var ticks = 0
    
        override public init(overlay: MKOverlay) {
            super.init(overlay: overlay)
    
            displayLink = CADisplayLink(target: self, selector:#selector(PolylineRenderer._update))
        displayLink.add(to: .main, forMode: .commonModes)
        }
    
        func _update() {
            if ticks < 3 {
                ticks+=1
            } else {
                ticks = 0
            }
    
            if ticks == 0 {
                self.setNeedsDisplay()
            }
        }
    
        deinit {
            if displayLink != nil {
                displayLink.invalidate()
            }
        }
    }
    

    Its pretty simple once you realize its just not painting fast enough. Skipping 3 ticks does not kill the CPU and bye to the jaggies.

提交回复
热议问题