更改 iOS 地图中的图钉方向

2024-05-06

  • 环球银行金融电信协会3.0
  • MKMAP视图
  • iOS

Note :- (融合的AppleMap,不与GoogleMap)

我做了以下事情:

  1. 实现地图并将自定义图像添加到用户位置注释
  2. 当地图打开时,它会在正确的位置显示用户位置

我的要求:

当用户移动到不同方向并停留在同一位置时(或 不同的地方)引脚(在当前位置)应该自动 指向用户指向的方向。

例如:如果船显示在用户位置位置并且其指向北,但如果用户向西移动,则船(用户位置图钉)也应指向该方向。

尝试使用以下代码:

//MARK:Change Direction Methods

    func angle(fromCoordinate first: CLLocationCoordinate2D, toCoordinate second: CLLocationCoordinate2D) -> Float {
        let deltaLongitude = second.longitude - first.longitude
        let deltaLatitude  = second.latitude - first.latitude
        let angle = (.pi * 0.5) - atan(deltaLatitude / deltaLongitude)
        if deltaLongitude > 0 {
            return Float(angle)
        }
        else if deltaLongitude < 0 {
            return Float(angle) + .pi
        }
        else if deltaLatitude < 0 {
            return .pi
        }

        return 0.0
    }

    //Animate direction of User Location
    func animateUserLocation() {

        //Old Coordinate (PLAT - Previous Lat , PLON - Previous Long) 
        let oldLocation = CLLocationCoordinate2D(latitude: UserDefaults.standard.value(forKey: "PLAT") as! CLLocationDegrees, longitude: UserDefaults.standard.value(forKey: "PLON") as! CLLocationDegrees)

        //New Coordinate (PLAT - Current Lat , PLON - Current Long)
        let newLocation = CLLocationCoordinate2D(latitude: UserDefaults.standard.value(forKey: "LAT") as! CLLocationDegrees, longitude: UserDefaults.standard.value(forKey: "LON") as! CLLocationDegrees)

        let getAngle = angle(fromCoordinate:oldLocation, toCoordinate:newLocation)
        var myAnnotation : RestaurantAnnotation?
        if annotationArray.count > 0{
            myAnnotation = annotationArray[0]
        }
        else {
            return
        }

        UIView.animate(withDuration: 2, animations: {() -> Void in
            myAnnotation?.coordinate = newLocation
            let annotationView = self.map.view(for: myAnnotation!)
            annotationView?.transform = CGAffineTransform(rotationAngle: CGFloat(getAngle))
        })

        //Save Previous lat long
        UserDefaults.standard.set(UserDefaults.standard.value(forKey: "LAT"), forKey: "PLAT")
        UserDefaults.standard.set(UserDefaults.standard.value(forKey: "LON"), forKey: "PLON")
        UserDefaults().synchronize()
    }

Called animateUserLocation方法来自didUpdateLocation有方法但没有运气。

请分享您的建议,我做错了什么。提前致谢。


理解iOS's位置概念完全有助于解决有关的任何问题AppleMap.

要移动地图 Pin 或 AnnotationView ,我们可以使用CoreLocation输出与用户当前位置相关的数据的框架。

import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate { 
  var locationManager:CLLocationManager! 

  override func viewDidLoad() {
    super.viewDidLoad() 

    locationManager  = CLLocationManager() 
    locationManager.delegate = self 
    locationManager.startUpdatingHeading() 
  } 

  func locationManager(manager: CLLocationManager!, didUpdateHeading heading: CLHeading!) {
    // This will print out the direction the device is heading
    println(heading.magneticHeading) } 
  }
}

在上面的例子中,“heading.magneticHeading" 将输出一个表示设备指向的方向的值。

  • 0 表示北
  • 90代表东
  • 180意味着南
  • 270意味着西
  • 其间的其他一切

下一步是使用这些值并旋转您的AnnotationView or Pin因此。

CGAffineTransformMakeRotation可以帮忙解决这个问题。

例如,如果您想要旋转到 imageview 以指向东北(这需要 45 度值),您的代码可能如下所示。

float degrees = 45 
imageView.transform = CGAffineTransformMakeRotation(degrees * M_PI/180)

请注意CGAffineTransformMakeRotation()需要一个弧度值,在上面的示例中,我们通过将度数乘以半圆的数量将度数转换为弧度。

以下链接确实很有帮助:

  • https://stackoverflow.com/a/7634232/3400991 https://stackoverflow.com/a/7634232/3400991

终于解决了我的问题。希望这个完整的答案也能帮助其他人。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改 iOS 地图中的图钉方向 的相关文章

随机推荐

  • 将 javascript 枚举键字符串转换为值

    在 JavaScript 代码中 我定义了以下枚举 MyMessageIds UndefinedId 0 FilenameId 1 BuildFileId 2 MovementArgsId 3 MoveId 4 ExecuteCommand
  • ASP.NET MVC 或 Ruby On Rails 哪个更快 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 将秒整数转换为 HH:MM,iPhone

    我正在为此苦苦挣扎 我想以 HH MM 格式在标签中显示一个以秒为单位的值 我在互联网上搜索了很长时间并找到了一些答案 但要么没有完全理解它们 要么它们看起来像是一种奇怪的做我想做的事情的方式 如果有人能帮助我解决这个问题 那就太好了 请记
  • 为多个 python 应用程序重用 Docker 镜像

    我对 Docker 的整个世界都很陌生 实际上 我正在尝试为不同的 python 机器学习应用程序建立一个环境 这些应用程序应该在自己的 docker 容器中相互独立地运行 由于我并不真正理解使用基础映像并尝试扩展这些基础映像的方式 因此我
  • 以 Vim 的 -o - 模式打开 Grep 输出中的文件

    如何将文件列表放入 Vim 的 o 模式 我有一个文件列表作为 Grep 的输出 我运行失败 1 grep il sid vim o 2 grep il sid xargs vim o 3 grep il sid xargs vim 4 v
  • ckeditor 4.5 fileUploadRequest 事件未触发

    我有一个 html id 为 id textarea 的文本区域 editor CKEDITOR inline id textarea filebrowserBrowseUrl browse url filebrowserUploadUrl
  • Shiro 与 SpringSecurity [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我目前正在评估基于Java的安全框架 我是Spring 3 0用户 因此SpringSecurity似乎是正确的选择 但Spring安全性似乎过
  • 将程序作为字符串传递给 Python 时使用导入和 for 循环

    一位同事最近向我发送了一个 bash 脚本 其中包含一些内联 Python 他使用的命令的形式为 echo e from foo import bar nfor i in range 10 n bar i 1 thing something
  • 检查对象是否具有属性,而不依赖于“__getattr__”

    有没有一种方法可以检查对象是否具有不依赖于的属性 getattr 或对象实现细节 考虑下面的代码 我想Proxy委托给Wrapped它无法处理什么 该代码有效 但我想避免测试attr in self dict 我更喜欢一个稳定的接口来执行此
  • 如何使用 SharpDX Toolkit 绘制透明 3D 对象?

    我正在开发一个使用 SharpDX 和 SharpDX Toolkit 来绘制简单 3D 形状的应用程序 Geometrics Desktop 示例对于入门非常有帮助 现在我正在尝试使某些形状透明 并且为了简单起见 我只是尝试使该示例中的茶
  • 复制键盘布局,向上推入底部表格

    当底部工作表打开时 有什么方法可以像 Android 键盘一样手动上推布局 滚动视图或回收器视图或整个活动 或者你可以说我想以底部表格的形式制作一个最小的键盘 不使用任何可编辑视图 100 工作配方 在 BottomSheetFragmen
  • 如何将 Java 客户端连接到 Windows 10 上的 Azure Cosmos db 模拟器,找不到证书

    Problem 我的演示代码客户端无法连接到 Windows 10 上的 Azure Cosmos 模拟器 Steps 我在 Windows 上安装了 Cosmosdb 模拟器 看起来不错 根据文档 我启动了 Windows cert ma
  • 将图像添加到 uitableview 单元格

    我有一个tableview 如何将图像添加到该单元格的左侧 cell imageView image UIImage imageNamed image png 更新 就像 Steven Fisher 所说 这应该只适用于具有 UITable
  • WPF 命令参数绑定问题

    我在理解命令参数绑定的工作原理时遇到一些困难 当我在调用 InitializeComponent 之前创建小部件类的实例时 它似乎工作正常 对 ExecuteCommand 函数中参数 Widget 的修改将 应用 到 widget 这是我
  • 程序如何在Python中的两个函数之间进行选择?

    我有一个 Python 3 2 程序 可以计算未来任意时间段内的投资价值 它可以处理单利和复利 问题是我定义了两个函数 main 和 main2 第一个是简单函数 第二个是复利函数 现在我想做的是 根据用户的一些输入 程序在运行 main
  • 为什么在 ruby​​ 中创建元类?

    我正在尝试了解 Ruby 对象模型 我知道实例方法保存在类中而不是类的对象中 因为它消除了冗余 我读到 每当创建一个类时 也会为新创建的类创建一个元类 元类存储类方法 即该类的单例方法位于元类中 例如 class MyClass def h
  • 这个程序中的“this”是什么意思?

    我正在编写一个程序 然后我在一些使用this这段代码中的关键字 我想知道它的目的是什么 它可以处理 Jbutton 或 JTextField 它可以使用 this 关键字显示消息 发生了什么getSource 这是代码 import jav
  • 如何使用 Selenium Webdriver 自动化验证码? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在为登录页面编写脚本 但我有一个验证码需要处理 Selenium 无法处理验证码 虽然网站出于同样的原因使用验证码 所以没有人可以
  • 导致链接平移并打开地图中的标记

    JSFiddle http jsfiddle net megatimes NVDLf 7 http jsfiddle net megatimes NVDLf 7 我有一张地图 它从数组创建多个标记 地图下方是一些链接 单击这些链接时 我想让
  • 更改 iOS 地图中的图钉方向

    环球银行金融电信协会3 0 MKMAP视图 iOS Note 融合的AppleMap 不与GoogleMap 我做了以下事情 实现地图并将自定义图像添加到用户位置注释 当地图打开时 它会在正确的位置显示用户位置 我的要求 当用户移动到不同方