草庐IT

ios - 折线不会出现在 MapKit 中

coder 2023-09-16 原文

我使用的是 Xcode 8.3.2,所以我首先导入 mapkit。然后我在 map 上设置标记。然后我添加以下代码以向 map 添加多段线,但它不会显示任何内容。

类 ViewController: UIViewController, MKMapViewDelegate { @IBOutlet weak var mapView: MKMapView!

    override func viewDidLoad() {
     self.mapView.delegate = self
    super.viewDidLoad()
    let template = "http://tile.openstreetmap.org/{z}/{x}/{y}.png"
        let point1 = CLLocationCoordinate2D(latitude: 6.9271, longitude: 79.8612);
        let point2 = CLLocationCoordinate2D(latitude: 9.6615, longitude: 80.0255);

            let overlay = MKTileOverlay(urlTemplate: template)
            overlay.canReplaceMapContent = true
            let location = CLLocationCoordinate2DMake(6.878069, 79.892119)
            mapView.add(overlay, level: .aboveLabels)
            mapView.setRegion(MKCoordinateRegionMakeWithDistance(location, 1100, 1100), animated: true)
            let pin = PinAnnotation(title: "Nimbus", subtitle: "Best", coordinate: location)
            mapView.addAnnotation(pin)



        let points: [CLLocationCoordinate2D]
        points = [point1, point2]

        let polyline = MKGeodesicPolyline(coordinates: points, count: 3)
        mapView.add(polyline)
        UIView.animate(withDuration: 1.5, animations: { () -> Void in
            let span = MKCoordinateSpanMake(0.01, 0.01)
            let region1 = MKCoordinateRegion(center: point1, span: span)
            self.mapView.setRegion(region1, animated: true)
        })
       }
 func mapView(_ mapview: MKMapView, rendererFor overlay: MKOverlay) ->MKOverlayRenderer{
                    if let overlayGeodesic = overlay as? MKGeodesicPolyline
                    {
                        let overLayRenderer = MKPolylineRenderer(polyline: overlayGeodesic)
                        overLayRenderer.lineWidth = 5
                        overLayRenderer.strokeColor = UIColor.blue
                        return overLayRenderer

                    }
        return MKOverlayRenderer(overlay: overlay)
                }

最佳答案

首先你需要添加这一行,我想你已经添加了但是无论如何

    self.mapView.delegate = self

之后你需要实现这个MKMapViewDelegate方法func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer 并返回MKOverlayRenderer 在这种情况下当前覆盖需要 MKPolylineRenderer 这是一个重要的部分,如果你不实现这个方法那么你永远不会呈现你的多段线

实现会是这样的

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {

    if let overlayGeodesic = overlay as? MKGeodesicPolyline
    {
        let overLayRenderer = MKPolylineRenderer(polyline: overlayGeodesic)
        overLayRenderer.lineWidth = 5
        overLayRenderer.strokeColor = UIColor.blue
        return overLayRenderer
    }

    if let overlayTile = overlay as? MKTileOverlay{
        let overLayRenderer = MKTileOverlayRenderer(tileOverlay: overlayTile)
        return overLayRenderer
    }

   return MKOverlayRenderer(overlay: overlay)
}

瞧!有你的折线呈现

关于ios - 折线不会出现在 MapKit 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45836556/

有关ios - 折线不会出现在 MapKit 中的更多相关文章

  1. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  2. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  3. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  4. ruby - 使用 rbenv 和 ruby​​-build 构建 ruby​​ 失败,出现 undefined symbol : SSLv2_method - 2

    我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby​​2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby​​-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm

  5. ruby - 为什么不能使用类IO的实例方法noecho? - 2

    print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上

  6. ruby - 为什么 return 关键字会导致我的 'if block' 出现问题? - 2

    下面的代码工作正常:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson)do|key,oldv,newv|ifkey==:aoldvelsifkey==:bnewvelsekeyendendputskerson.inspect但是如果我在“ifblock”中添加return,我会得到一个错误:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson

  7. ruby - 安装 tiny_tds 在 mac os 10.10.5 上出现错误 - 2

    我正在使用macos,我想使用ruby​​驱动程序连接到sqlserver。我想使用tiny_tds,但它给出了缺少free_tds的错误,但它已经安装了。怎么能过这个?~brewinstallfreetdsWarning:freetds-0.91.112alreadyinstalled~sudogeminstalltiny_tdsBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtiny_tds:ERROR:Failedtobuildgemnativeextension.完整日志如下:/System

  8. ruby - 如何让几条 haml 线出现在同一行上? - 2

    我有以下haml:9%strongAskedby:10=link_to@user.full_name,user_path(@user)11.small="(#{@question.created_at.strftime("%B%d,%Y")})"这当前将链接和日期放在不同的行上,当它看起来像“链接(日期)”并且日期的类跨度为小...... 最佳答案 您的代码将生成类似这样的html:Askedby:UsernameApril26,2011当您使用类似.small的东西(即使用点而不指定元素类型)时,haml会创建一个implicit

  9. ruby - 获取数组中值的最大连续出现次数 - 2

    下面有没有更优雅的方法来实现这个:输入:array=[1,1,1,0,0,1,1,1,1,0]输出:4我的算法:streak=0max_streak=0arr.eachdo|n|ifn==1streak+=1elsemax_streak=streakifstreak>max_streakstreak=0endendputsmax_streak 最佳答案 类似于w0lf'sanswer,但通过从chunk返回nil来跳过元素:array.chunk{|x|x==1||nil}.map{|_,x|x.size}.max

  10. ruby - 按数组中出现的频率排序 - 2

    有没有一种有效的方法来做到这一点。我有一个数组a=[1,2,2,3,1,2]我想按升序输出出现的频率。示例[[3,1],[1,2],[2,3]]这是我的ruby​​代码。b=a.group_by{|x|x}out={}b.eachdo|k,v|out[k]=v.sizeendout.sort_by{|k,v|v} 最佳答案 a=[1,2,2,3,1,2]a.each_with_object(Hash.new(0)){|m,h|h[m]+=1}.sort_by{|k,v|v}#=>[[3,1],[1,2],[2,3]]

随机推荐