自定义注释图像仅在程序开始时旋转(Swift-iOS)

2023-12-04

请在这里帮助新手 iOS 开发者! :) 所以,我有一个计时器,它定期从提供公交车实时位置的 xml 表中获取公交车的纬度和经度。我能够设置解析器、为总线运动设置动画并为总线设置自定义(箭头)图像。

然而,问题是,每次获得纬度和经度的新值时,我无法旋转总线注释。这busAnnotation仅在程序启动时旋转,而不是每次更新总线方向时旋转。

下面是我的xmlparser函数,它计算busDirection每次位置改变时。的价值busDirection随着位置变化而正确变化,但随着计时器的继续,由于某种原因它不适用于旋转。注释的移动也具有良好的动画效果,只是在程序启动时不会旋转。

// Some constants
var oldLatitude: Double? = 44.97234
var oldLongitude: Double? = -93.2446329
var busDirection: CLLocationDirection()

func parser(parser: NSXMLParser!, didStartElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!, attributes attributeDict: NSDictionary!) {
    if (elementName == "vehicle") {
        var latitude = attributeDict["lat"]?.doubleValue            // Get latitude of bus from xml
        var longitude = attributeDict["lon"]?.doubleValue           // Get longitude of bus from xml

        if (oldLatitude == latitude && oldLongitude == longitude) {
            return
        }
        else {  // Update bus location         
            busDirection = directionBetweenPoints(MKMapPointForCoordinate(CLLocationCoordinate2DMake(oldLatitude!, oldLongitude!)), destinationPoint: MKMapPointForCoordinate(CLLocationCoordinate2DMake(latitude!, longitude!)))       // Get direction of bus:

            UIView.animateWithDuration(0.5) {
                self.busAnnotation.coordinate = CLLocationCoordinate2DMake(latitude!, longitude!)                  
                self.mapView(self.map, viewForAnnotation: self.busAnnotation).annotation = self.busAnnotation
                self.map.addAnnotation(self.busAnnotation)                 
            }

            oldLatitude = latitude
            oldLongitude = longitude
        }
    }
}

这是我实现的“viewForAnnotation”,以便更改注释的图像并旋转它

func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
    let reuseId = "pin" 
    var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKPinAnnotationView  

    if pinView == nil {
        pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
        pinView!.image = imageWithImage(UIImage(named:"arrow.png")!, scaledToSize: CGSize(width: 25.0, height: 25.0))       // Set custom image for annotation and resize it         
    }
    else {
        pinView!.annotation = annotation
    }   

    // Rotate the annotation.
    pinView?.transform = CGAffineTransformRotate(self.map.transform, CGFloat(degreesToRadians(self.busDirection)))
    return pinView
}

这些是我在上述方法中使用的一些辅助函数:

// For rotating bus annotations:
func degreesToRadians(degrees: Double) -> Double { return degrees * M_PI / 180.0 }
func radiansToDegrees(radians: Double) -> Double { return radians * 180.0 / M_PI }

func directionBetweenPoints(sourcePoint: MKMapPoint, destinationPoint : MKMapPoint) -> CLLocationDirection {
    let x : Double = destinationPoint.x - sourcePoint.x;
    let y : Double = destinationPoint.y - sourcePoint.y;

    return fmod(radiansToDegrees(atan2(y, x)), 360.0) + 90.0;
}

你们认为我在这里遗漏了什么吗?每次更新位置时如何旋转总线注释?提前致谢。


仅当地图视图第一次为注释创建视图时才会发生旋转。它不是在每次注释更新时创建新视图,而是简单地移动视图。这对于地图视图来说效率更高。 所以,你应该做的是pinView一个属性,在 init 方法中实例化它,然后返回mapView(, viewForAnnotation:)并直接对其应用旋转pinView在你的动画块中。

UIView.animateWithDuration(0.5) {
    self.busAnnotation.coordinate = CLLocationCoordinate2DMake(latitude!, longitude!)                  
    self.map.addAnnotation(self.busAnnotation)
    if let pv = self.pinView {
        pv.transform = CGAffineTransformRotate(self.map.transform, CGFloat(degreesToRadians(self.busDirection)))
    }              
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义注释图像仅在程序开始时旋转(Swift-iOS) 的相关文章

  • ios 8 核心数据崩溃

    保存时 CoreData 发生崩溃 2014 09 16 09 51 58 273 My app 2678 105246 Terminating app due to uncaught exception NSInvalidArgument
  • cordova-plugin-whitelist 适用于 Android,但不适用于 iOS (Phonegap Build)

    我正在开发一个用 Cordova 封装并使用 Phonegap Build 构建的 JavaScript 应用程序 我们包括cordova plugin whitelist来自我们构建中的 npm 并添加了
  • 在 iOS 中管理和解除多个视图控制器

    我是一名 iPhone 新手程序员 在开发我的第一个游戏 应用程序时 我为自己提出了一个问题 创造了一个问题 我对此进行了研究 并认为我已经看到了答案 但我不明白如何使它们适用于我的应用程序 我有一个游戏 有几个视图控制器 欢迎 玩 高分
  • 使用 JavaScript 从 URL 变量读取来加载不同的 CSS 样式表

    我试图在我的 WordPress 博客上使用两个不同的样式表 以便在通过 Web 访问页面时使用一个样式表 而在通过我们的 iOS 应用程序访问博客内容时使用另一个样式表 现在 我们将 app true 附加到来自 iOS 应用程序的 UR
  • 为什么我们在 @synchronized 块中传递 self ?

    我猜 synchronized 块不依赖于对象 而是依赖于线程 对吗 既然如此 我们为什么要传递 self 呢 synchronized是语言提供的用于创建同步作用域的构造 因为使用简单的全局共享互斥锁效率非常低 因此序列化每个单独的互斥锁
  • 我可以在 NS_SWIFT_NAME 中使用保留关键字吗?

    我正在尝试使 Objective C 委托协议更漂亮以便在 Swift 中使用 但我在弄清楚如何使用时遇到了一些麻烦NS SWIFT NAME 是否可以使用NS SWIFT NAME指定 Swift 名称中与 Objective C 关键字
  • 在 Swift 中将 Int 转换为 UInt32

    我正在制作一个 Tcp 客户端 因此使用CFStreamCreatePairWithSocketToHost它期望第二个参数为 UInt32 这是我正在尝试做的事情的示例 func initNetwork IP String Port In
  • 如何在 Swift 中使用 substringToIndex? [复制]

    这个问题在这里已经有答案了 我在这一行收到编译器错误 UIDevice currentDevice identifierForVendor UUIDString substringToIndex 8 类型 String Index 不符合协
  • 如何在 RestKit 中为同一类提供两条发布路线

    由于我无法弄清楚如何为同一个类设置两个不同的 POST 资源路径 因此我尝试手动创建 RKObjectLoader 请求 但它似乎不断发送 GET 请求而不是 POST 即使我已将方法设置为邮政 这是我的代码 User user User
  • iOS 开发: [[self navigationController] viewControllers]; 有哪些原因?会返回零吗?

    以下语句返回零 NSArray viewControllersInNavStack self navigationController viewControllers 这个语句是在导航堆栈中大约四层深度的视图控制器中调用的 所以我不明白它如
  • 如何在我的 iOS 项目中添加和执行 .sql 文件?

    我找到了很多关于在 iOS 中使用 SQLite 数据库的教程 但没有找到任何直接引用 sql 文件的内容 谁能告诉我如何将现有的 SQL 数据库链接到我的应用程序 编辑 这是一个 MySQL 转储 我们有一个基于浏览器的抽认卡程序 现在我
  • iOS 外部附件框架:如何获取特定 MFI 设备的协议字符串

    我正在编写一个 iOS 应用程序 用于与 mini mPlay Drumi MP18B 小型蓝牙扬声器 进行通信 据我所知 showBluetoothAccessoryPickerWithNameFilter仅显示协议字符串添加到 Info
  • 在 iOS 中录制音频并永久保存

    我制作了 2 个 iPhone 应用程序 可以录制音频并将其保存到文件中并再次播放 其中之一使用 AVAudiorecorder 和 AVAudioplayer 第二个是苹果的在这里说话 http developer apple com l
  • WebGL iOS 渲染为浮点纹理

    我正在尝试在 iOS Safari 上的 WebGL 中渲染浮点纹理 而不是在本机应用程序中 我已经设法让 iOS 读取手动 例如从 JavaScript 创建的浮点纹理 但是当我创建浮点类型的帧缓冲区并使用 GPU 渲染到其中时 它不起作
  • 从 RemoteIO 保存音频的示例?

    我进行了搜索 但没有找到任何从 RemoteIO 音频单元保存音频的好示例或教程 我的设置 使用 MusicPlayer API 我有几个 AUSamplers gt MixerUnit gt RemoteIO 音频播放效果很好 我想添加将
  • 从 Core Data、iOS 获取最后插入的项目

    有没有办法获取核心数据数据库中最后插入的项目 这将返回最后插入的对象 setFetchLimit 1 和 setFetchOffset 所有条目数 1
  • swift 中的负数模

    负数模如何在 swift 中工作 当我执行 1 3 时 它给出 1 但余数是 2 其中有什么问题 雨燕余数运算符 计算余数 整数除法 a b a a b b where 是截断整数除法 在你的情况下 1 3 1 1 3 3 1 0 3 1
  • Swift 如何设计 UIWebView 在 Story Board 中自动调整全屏大小

    我在 StoryBoard 中设计了一个 320x500 的 UIWebView 但是当在 Iphone 6 Plus 模拟器中运行时 我想要这个 webview 全屏或随设备屏幕缩放 如何在故事板中制作它 我在 ViewDidLoad 中
  • iOS 对 Google 云消息传递的支持

    我在谷歌的开发者控制台中看到 GCM 允许为 iOS 生成 API 密钥 我在网上搜索了有关如何在 iOS 应用程序中通过 GCM 实现推送通知的任何类型的文档 但没有找到答案 真的有可能在 iOS 应用程序中使用 GCM 实现推送通知 j
  • 当设置 setVisibleXRangeMaximum 时,iOS-Charts X 轴值无限重复

    我正在尝试绘制一个图表 其中 x 轴是TimeIntervalY 轴是power consumption 由于每天都会有数据 因此将有太多数据无法显示 因此 我想一次显示 5 个值 我通过设置实现了这一点self chart setVisi

随机推荐

  • THttprio onBeforeExecute 更改soapRequest

    我已经为一个项目导入了一些 wsdl 我想更改 HttpRio onBeforeExecute 事件上的 SoapRequest 但是 当我更改请求时 我收到一些错误 如何更改请求 xml 文件 在此事件上使用 stringReplace
  • Docker - 如何访问未附加到容器的卷?

    我有一个数据容器 其中有一个由其他容器使用的卷 volumes from 数据容器被意外删除 值得庆幸的是 该卷没有被删除 有什么方法可以重新运行数据容器并将其指向该卷吗 有什么方法可以重新运行数据容器并将其指向该卷吗 当然 我在 如何从已
  • 派生对象的模板是基类型模板的子类

    如果 apple 是 fruit 的子类 那么List
  • 如何使用 iText 在 Web 环境中通过智能卡签署 PDF?

    阅读以下参考文献 iText 数字签名白皮书 and C 示例 具体来说第4章 对于那些有兴趣的人 另一个精彩而简洁的总结PDF 签名过程 CAPICOM 文档 此处和 iText 邮件列表档案上的在线示例 问题 例如here and he
  • Jekyll 插件中的“优先级”标志应该如何工作?

    我目前正在尝试为 Jekyll 开发一个插件 这将有助于使用云数对于响应式图像 当前源是在我的 Github 仓库中 稍后当 如果它有效时 我会将其变成宝石 这个插件有两个特点 用于定义 Cloudinary 图像的 Liquid 标签 例
  • 如何对没有逻辑的类进行单元测试?

    我发现为算法编写单元测试很容易 例如 sort List 很容易编写如下测试 list 2 1 4 assert sort list 1 2 4 但我发现测试没有逻辑的方法真的很难 没有if语句 只是一组调用 我主要想知道如何对它们进行单元
  • Codeigniter - 无法调用系统的 lang() 函数

    尝试调用属于 codeigniter 系统 帮助程序 language helper php 一部分的 lang 函数 导致致命错误 Fatal error Call to undefined function lang def actio
  • facebook feed 方法链接默认添加 fb_ref=Default 在最后如何删除

    我正在使用 feed 方法从我的网站使用 asp net 和 jquery javascript 发布到我的 facebook 墙 最初它工作正常 但突然在最后的链接中添加了 fb ref Default 我不知道为什么会发生我想删除请帮助
  • 使用 ARC 避免出现悬空指针

    我有一个物体 里面有一个strong对对象的引用 property nonatomic strong NSObject thing 在其他地方 我有一个传递对象引用的方法 thirdObject doSomething secondObje
  • 对 MySQL 表中的行重新排序

    我有一张桌子 ID Name Order 1 John 1 2 Mike 3 3 Daniel 4 4 Lisa 2 5 Joe 5
  • 无法使用 http/https 将 Git 推送到远程存储库

    我在服务器上的 apache 提供的目录中有一个 Git 存储库 我已经配置了 WebDAV 并且它似乎运行正常 Litmus 返回 100 成功 我可以从远程主机克隆我的存储库 但是当尝试推送 http 或 https 时 出现以下错误
  • Azure SQL 数据仓库的简单性能测试

    我们正在努力将现有应用程序移植到 Azure SQL 数据仓库 为了更好地了解 Azure SQL 数据仓库的性能 工作负载管理特征 功能 我设置了一个我认为非常简单的测试 我加载了一个静态表 即我们企业的日历 包含大约 20k 行 即对于
  • 能够使用附近连接同时向多个设备发送消息/字节

    为了尝试附近的 API 我决定构建一个应用程序 允许老师跟踪学生在课堂上的出勤情况 类似于什么张嘉伦是在做 我已经经历了谷歌关于剪刀石头布和对讲机的示例代码 但似乎只有一个设备可以连接在任何一个时间当我使用 4 部手机测试样本时 我想构建一
  • 使用 selenium 滚动抓取 javascript 表

    我正在尝试抓取通过 javascript 生成的表格 但我很挣扎 到目前为止我的代码是 driver webdriver Chrome driver get https af ktnlandscapes com get table firs
  • 如何导出具有依赖关系的 SVN 存储库的一部分?

    我正在尝试使用迁移 SVN 存储库的一部分svnadmin dump 提供的 svndumpfilter 工具不管理导出中未包含的目录的复制 移动 重命名依赖项 有没有一个工具可以管理这些依赖关系 我发现了 Simon Tatham 的一个
  • 为每个类别选择 N 条记录并按 X 排序

    我有一个包含博客文章的数据库表 我想在主页上显示每个类别的一篇 或多篇 帖子 例如按日期排序 所以我的帖子表如下所示 id title description cat filename date 我将如何创建这样的查询 我想过使用 grou
  • 如何计算正弦曲线两端的面积

    给定这个数据集 y lt c 13 16 35 40 28 36 43 33 40 33 22 5 27 31 29 25 26 31 26 24 25 29 23 4 t lt 1 24 我的目标是计算两个面积 第一个区域将仅集成来自零线
  • 使用 Grunt Uglify 进行动态映射和连接

    我正在尝试使用动态映射并使用 Grunt Uglify 连接 Javascript 文件 我有以下无法正常工作的情况 这是我的文件夹结构 javascript account custom js bills billing one js b
  • elasticsearch:如何索引仅是停用词的术语?

    我在后台使用 elasticsearch 构建了自己的小搜索 取得了很大的成功 但有一件事我在文档中找不到 我正在索引音乐家和乐队的名字 有一个名为 The The 的乐队 由于停用词列表 该乐队从未被索引 我知道我可以完全忽略停用词列表
  • 自定义注释图像仅在程序开始时旋转(Swift-iOS)

    请在这里帮助新手 iOS 开发者 所以 我有一个计时器 它定期从提供公交车实时位置的 xml 表中获取公交车的纬度和经度 我能够设置解析器 为总线运动设置动画并为总线设置自定义 箭头 图像 然而 问题是 每次获得纬度和经度的新值时 我无法旋