如何在 Swift 中制作引脚注释标注?

2023-11-25

我试图让标注工作,但没有发生,因为我在准备继续时做错了。我想知道如何能够对另一个视图进行引脚注释标注?


当点击标注中的按钮时,跳转到另一个场景的过程如下:

  1. Set the delegate地图视图作为视图控制器。您可以在 Interface Builder 的“连接检查器”中或以编程方式执行此操作。您想要指定视图控制器符合MKMapViewDelegate, too.

  2. 创建注释时,请确保也设置标题:

    let annotation = MKPointAnnotation()
    annotation.coordinate = coordinate
    annotation.title = ...
    mapView.addAnnotation(annotation)
    
  3. 定义带有按钮标注的注释视图子类:

    class CustomAnnotationView: MKPinAnnotationView {  // or nowadays, you might use MKMarkerAnnotationView
        override init(annotation: MKAnnotation?, reuseIdentifier: String?) {
            super.init(annotation: annotation, reuseIdentifier: reuseIdentifier)
    
            canShowCallout = true
            rightCalloutAccessoryView = UIButton(type: .infoLight)
        }
    
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
        }
    }
    
  4. 指导你的MKMapView使用此注释视图。 iOS 11 简化了该过程,但我将介绍如何以两种方式完成此操作:

    • 如果您的最低 iOS 版本是 11(或更高版本),您只需将自定义注释视图注册为默认值即可。你一般不实施mapView(_:viewFor:)在 iOS 11 及更高版本中完全没有。 (您可能实现该方法的唯一时间是您需要注册多个重用标识符,因为您有多种类型的自定义注释类型。)

      override func viewDidLoad() {
          super.viewDidLoad()
      
          mapView.register(CustomAnnotationView.self, forAnnotationViewWithReuseIdentifier: MKMapViewDefaultAnnotationViewReuseIdentifier)
      }
      
    • 如果您需要支持 11 之前的 iOS 版本,您需要确保将您的视图控制器指定为MKMapView然后将实施mapView(_:viewFor:):

      extension ViewController: MKMapViewDelegate {
          func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
              if annotation is MKUserLocation { return nil }
      
              let reuseIdentifier = "..."
      
              var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseIdentifier)
      
              if annotationView == nil {
                  annotationView = CustomAnnotationView(annotation: annotation, reuseIdentifier: reuseIdentifier)
              } else {
                  annotationView?.annotation = annotation
              }
      
              return annotationView
          }
      }
      

    例如,这会产生如下所示的标注,其中包含.infoLight右侧按钮:

    enter image description here

  5. 实施calloutAccessoryControlTapped以编程方式执行segue:

    func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
        performSegue(withIdentifier: "SegueToSecondViewController", sender: view)
    }
    

    显然,这假设您已经在两个视图控制器之间定义了一个segue。

  6. 当你进行segue时,将必要的信息传递到目标场景。例如,您可以传递对注释的引用:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let destination = segue.destination as? SecondViewController,
            let annotationView = sender as? MKPinAnnotationView {
            destination.annotation = annotationView.annotation as? MKPointAnnotation
        }
    }
    

有关更多信息,请参阅创建标注 in the 位置和地图编程指南。

对于上述内容的 Swift 2 实现,请参阅此答案的先前修订版.

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

如何在 Swift 中制作引脚注释标注? 的相关文章

  • 设置/覆盖 UICollectionView 中单元格之间的填充

    我有一个 UICollectionView 但在获取单元格之间的填充时遇到了问题 理论上 我应该能够将屏幕除以 4 并且我可以获得包含 4 个图像的单元格大小 完美地占据屏幕宽度 但是 它选择不这样做 相反 它会创建 3 个具有巨大填充的图
  • 从 iOS 应用程序内的 Junos Pulse 获取用户凭据

    我正在通过 Junos Pulse 在 iPad 中建立 VPN 连接 以进入我组织的 Intranet 谁能告诉我是否有任何 iOS api 或 SDK 可用于获取在 iOS 应用程序内的 Junos pulse 中输入的用户凭据 Jun
  • 用于字数计算的 Swift String 中的字数

    我想做一个程序来找出字符串中有多少个单词 用空格 逗号或其他字符分隔 然后把总数加起来 我正在制作一个平均计算器 所以我想要数据总数 然后将所有单词相加 update Xcode 10 2 x Swift 5 或更高版本 使用基础方法enu
  • 在带有 Storyboard 的 XCode 4 中以模态方式推送视图时,出现“对开始/结束外观转换的不平衡调用”警告

    在网上进行了一些研究但没有成功后 我来这里向您询问有关我的警告的问题 实际上 我有一个带有导航控制器的视图 V1 我想在 V1 完成加载时推送模态视图 V2 所以我用performSegueWithIdentifier方法 我正在使用故事板
  • 如何防止Apple Watch进入睡眠状态?

    我们正在开发一个 Apple Watch 项目 但如果不被打扰 手表就会进入睡眠状态 有什么办法可以阻止它进入睡眠状态吗 据我所知和有关该主题的其他搜索 目前还没有api可通过编程方式启用或禁用 Apple Watch 的睡眠模式
  • 错误域=AVFoundationErrorDomain代码=-11814“无法记录”

    它不断给我错误 错误域 AVFoundationErrorDomain代码 11814 无法记录 我不确定问题是什么 我试图在拍照后计数器达到 1 时录制声音 static int counter counter will always b
  • 添加自定义过渡会导致 xib 加载错误的屏幕尺寸

    我正在尝试向具有 xib 的 UIViewController 添加自定义过渡 我尝试了几种方法 但它们都有相同的问题 视图显示的屏幕尺寸错误 我当前的示例基于以下教程 使用 Swift 在 iOS 中自定义 UIViewControlle
  • 如何恢复消耗品应用内购买?

    我正在开发一款 iOS 游戏 用户可以通过应用内消耗品购买一定数量的内部货币 比如 1000 金币 如果用户想将余额从一台设备转移到另一台设备 如何恢复消耗品购买 在苹果的文档中 它说我们必须使用我们自己的服务器 但是如何获取用户的Appl
  • iOS:提高图像绘制速度

    我有一系列想要制作动画的图像 UIImageView支持一些基本的动画 但不足以满足我的需求 我的第一个方法是使用UIImageView并设置image当图像属性 这太慢了 速度慢的原因是图像的绘制 这让我感到惊讶 我以为瓶颈会加载图像 我
  • Xcode 中的 iOS 9 警告 - 此文件设置为针对早于项目部署的版本进行构建。功能可能有限

    我刚刚将我的 Mac 更新到最新的操作系统 并将 Xcode 更新到最新版本 现在我收到此警告 但我不知道该由谁来删除它 也不知道它的真正含义是什么 有人可以向我解释一下吗 Thanks Select Main storyboard in
  • 当强制退出/向上滑动以终止 iOS 应用程序而不点击横幅/警报时,如何获取推送通知有效负载?

    我正在构建一个应用程序来处理从 Parse 推送的通知 并尝试创建通知历史记录功能 我已经成功启用了后台模式 因此当应用程序在后台运行时 应用程序可以通过以下方式很好地获取有效负载application didReceiveRemoteNo
  • 在 Swift 中使用 CommonCrypto 解密时出现问题

    我在一家Swift only加密 解密Extension for String and NSData 并且 crypt 部分的工作基于 Zaph 在链接问题中提供的答案 在 Swift 中使用 CCCrypt CommonCrypt 时出现
  • iphone:如何停止快门动画?

    我有两个问题 1 我想知道如何在相机加载时停止快门动画 我正在使用 UIImagePickerController 我已经参考了堆栈溢出的许多答案 但没有成功 2 我在相机中有一个自定义按钮 使用cameraOverlayView并想通过单
  • git 提交错误:检测到大文件

    您好 我正在为 ios 8 1 开发一个应用程序 xcode 我已经使用 googleMaps 框架来实现自动完成功能 当我尝试在 Git 中推送我的项目时 我收到大文件检测错误 后来尝试使用 git lfs 并跟踪 git 检测到的文件
  • 为什么我的视图仍然以横向呈现?

    我的视图是由导航控制器控制的 因此我将导航控制器支持的方向设置为明确的纵向和纵向UpSideDown 这可以工作 但是如果调用视图时前一个视图处于横向状态 它将以横向方式呈现并保持横向状态 直到设备旋转 如何防止这种情况发生 这是我的代码
  • 避免 UIImage 的 imageNamed - 内存管理

    我正在经历这个链接 http akosma com 2009 01 28 10 iphone memory management tips 我遇到了一个点避免 UIImage 的 imageNamed 出于什么原因我们应该避免这种情况 它会
  • UIWebView Bug:-[UIWebView cut:]:无法识别的选择器发送到实例

    In the UIWebView 如果包含文本的输入元素具有焦点 并且按下按钮导致输入失去焦点 则随后双击输入以重新获得焦点并从出现的弹出栏中选择 剪切 或 复制 或 粘贴 会导致这UIWebView因错误而崩溃 UIWebView cut
  • Swift 中的 UIAlert 自动消失?

    我有以下代码 Creates Alerts on screen for user func notifyUser title String message String gt Void let alert UIAlertController
  • RemoteIO 音频单元播放回调中的 AudioBufferList 内容

    我想 拦截 音频数据传送到 iOS 设备扬声器的过程 我相信这可以使用 RemoteIO 音频单元和回调来完成 在下面的playbackCallback中 ioData实际上包含任何音频数据吗 static OSStatus playbac
  • IPV6 快速可达性

    我是 swift 和 xcode 的新手 并且我的应用程序因 IPV6 而被拒绝 性能 2 1 当我们执行以下操作时 您的应用程序会在运行 iOS 9 3 5 并连接到 IPv6 网络的 iPad 和 iPhone 上崩溃 具体来说 当我们

随机推荐

  • C# Visual Studio GPIB 命令

    在 C Visual Studio 中使用什么命令与 GPIB 仪器进行通信 我需要能够向仪器写入命令并读取输出 I use 安捷伦 IO 库套件 这是在 C 上使用它的教程 C 中的 I O 编程示例 然而 在我的公司中 我们遇到了 VI
  • Popstate - 将弹出状态传递给事件处理程序

    以下代码应导致警报 1 但实际上什么也不执行 window onpopstate function event alert event state a history pushState a 1 history back Fiddle ht
  • 创建具有圆形区域边缘的 Voronoi 艺术

    I m trying to create some artistic plots like the ones below 区域的颜色并不重要 我想要实现的是沿着 Voronoi 区域的边缘的可变 厚度 特别是 它们看起来像一个更大的圆形斑点
  • RISC-V:PC 绝对值与 PC 相对值

    我是 RISC V 新手 我无法理解何时写入 PC 程序计数器 相对指令以及何时写入 PC 绝对指令 例如 一条指令lui其次是jalr考虑指令PC 绝对 以及一条指令auipc其次是jalr考虑指令相对于PC 据我了解 所有指令都将由 P
  • 如何创建 Bash 别名?

    我在 OSX 上 我需要放这样的东西 alias blah usr bin blah 在配置文件中 但我不知道配置文件在哪里 您可以添加一个alias or a function在您的启动脚本文件中 MacOS 10 13 High Sie
  • 将每 N 行输入放入一个新列中

    在 bash 中 给定输入 1 2 3 4 5 6 7 8 And N例如5 我想要输出 1 6 11 2 7 12 3 8 4 9 5 10 我该怎么做呢 使用鲜为人知的宝石pr seq 20 pr ts column 4 1 6 11
  • Javascript 谷歌音译 API 未通过 https 提供服务

    JavaScript 谷歌音译 API 不通过 h ttps 提供服务 我遇到了混合内容错误 它可以在 http 网站上运行 但不能在 https 上运行 我尝试通过以下所有方式调用 API
  • WinForms 的 C# 中动态变量名称的使用

    不确定最好的表达方式是什么 但我想知道是否可以在 C 3 5 中完成动态变量名称访问 这是我目前正在寻求 智能 或通过循环变得更加优雅的代码 private void frmFilter Load object sender EventAr
  • 在jsp中访问javascript中的会话变量

    我需要为 google API 表提供数据 所以我将其从 servlet 发送到 JSP 但是我如何在 googles javascript中访问这些数据 我将提供另一个 JS 的示例 非常简单 只是为了让我学习如何制作主题所说的内容
  • 在 Docker 容器中找不到 Chromedriver 可执行路径

    我使用下面的 Docker 文件创建了一个 docker 映像 它安装最新版本的 Google Chrome 和 Chrome 驱动程序 以及其他 pip 包 Dockerfile FROM python 3 9 Install Chrom
  • 从 iPhone 打开 Google 地图并显示路线

    我想知道如何从 iPhone 应用程序打开 Google 地图 以便 Google 地图在您到达网页时显示路线 今天我使用的代码是only显示坐标 NSString latlong NSString stringWithString 59
  • ScrollView 内的 ViewPager 无法正确滚动

    我有一个 页面 上面有许多组件 并且其中的内容比设备的高度长 好吧 只需将所有布局 整个页面 放入一个ScrollView 没问题 其中一个组件是ViewPager 这可以正确渲染 但对滑动 猛击的响应无法正确执行 它很紧张并且并不总是有效
  • IE10选择框问题

    我在 IE10 中测试我的应用程序 发现选择框有一个奇怪的行为 所选选项会突出显示 上方 下方选项会显示在所选选项的上方 下方 下拉框被隐藏 这只发生在 IE10 中 在所有其他浏览器中 选项显示在选择框下方 在 IE10 和 IE9 中尝
  • 为什么我收到此错误:ConnectionString 属性尚未初始化

    我已经搜索并尝试了一切 但无法弄清楚这一点 我想做一些简单的事情 但似乎我做错了 基本上 任何已存款的用户 我想返回 true 如果没有 我想返回 false 我想这应该很容易 但我对此感到困惑 这是错误 ConnectionString
  • ECR事件后触发AWS lambda函数

    我试图让 AWS Lambda 函数在将新映像推送到 AWS 容器注册表时运行 我已经创建并测试了该功能 该功能运行良好 然后 我使用以下模式创建了一个简单的 CloudWatch 事件规则 source aws ecr 我相信 ECR 的
  • WiX 安装程序在卸载时不会删除文件

    我告诉 wix MSI 文件在卸载时删除文件 但它根本没有注册它 对于捆绑包 我将 MSI 文件称为
  • 选择和悬停覆盖 SWT 表组件中的单元格背景颜色

    我正在使用 SWT 和 Eclipse RCP 来呈现表格 我的问题是 如果我更改单元格 实际上是 ViewerCell 的背景 我可以看到它具有新的颜色 我的问题是 如果我在表中选择一行 或者将鼠标悬停在包含相关单元格的行上 则选择 悬停
  • 如何将两个列表合并为一个列表?

    I have a 1 2 b a b I want c 1 a 2 b j for i in zip a b for j in i
  • 如何在 Django/python 中每行循环三列?

    我想在 for 期间显示数据 每行三列 我希望我的结果如下所示 table tr td VALUE1 td td VALUE2 td td VALUE3 td tr tr td VALUE4 td lt td VALUE5 td td VA
  • 如何在 Swift 中制作引脚注释标注?

    我试图让标注工作 但没有发生 因为我在准备继续时做错了 我想知道如何能够对另一个视图进行引脚注释标注 当点击标注中的按钮时 跳转到另一个场景的过程如下 Set the delegate地图视图作为视图控制器 您可以在 Interface B