首页 > 解决方案 > 如何在 Swift 中识别 SVG 对象内部的触摸?

问题描述

我目前正在构建一个应用程序,我需要在其中识别 SVG 地图中的接触点。所以我有一个map多重rectangles的,当用户触摸其中一个时,rectangles需要触发一个动作。我该如何解决这个问题?

一种选择是数学计算触摸位置是否位于矩形之间,但我不是数学天才。

我的首选选择是使用框架。我找到了 SVGKit 框架,但不幸的是它是用 Objective C 编写的。

标签: objective-cswiftxcodesvgsvgkit

解决方案


您可以将 SVGKit 用于 Swift 项目。您必须使用伞头文件,它是框架的“主”头文件。

将 Objective-C 导入 Swift

从 Swift 中的 Objective-C 代码访问类和其他声明。

概述

无论项目最初使用哪种语言,您都可以在一个项目中同时使用 Objective-C 和 Swift 文件。这使得创建混合语言应用程序和框架目标就像创建以单一语言编写的应用程序或框架目标一样简单。

在此处输入图像描述

根据您是在编写应用程序还是框架,在混合语言目标中使用 Swift 代码中的 Objective-C 声明的过程会略有不同。下面描述了这两个过程。

在应用程序目标中导入代码

要将一组 Objective-C 文件导入到同一应用程序目标中的 Swift 代码中,您需要依赖 Objective-C 桥接头文件将这些文件公开给 Swift。当您将 Swift 文件添加到现有的 Objective-C 应用程序或将 Objective-C 文件添加到现有的 Swift 应用程序时,Xcode 提供了创建此标头的功能。

在此处输入图像描述

如果您接受,Xcode 将与您正在创建的文件一起创建桥接头文件,并使用您的产品模块名称后跟“-Bridging-Header.h”来命名它。或者,您可以通过选择File> New> File> [operating system]> Source>自己创建一个桥接头Header File

编辑桥接头以将 Objective-C 代码暴露给 Swift 代码:

  • 在您的 Objective-C 桥接头标头中,导入您想要向 Swift 公开的每个 Objective-C 标头。
  • 在 Build Settings 中的 Swift Compiler - Code Generation 中,确保 Objective-C Bridging Header 构建设置具有到桥接头文件的路径。该路径应该与您的项目相关,类似于Info.plist在构建设置中指定路径的方式。在大多数情况下,您不需要修改此设置。

桥接头中列出的任何公共 Objective-C 标头对 Swift 都是可见的。Objective-C 声明可自动从该目标内的任何 Swift 文件中获得,无需导入语句。使用自定义 Objective-C 代码中的类和其他声明,使用与系统类相同的 Swift 语法。

在框架目标中导入代码

要在与您的 Swift 代码相同的框架目标中的文件中使用 Objective-C 声明,您需要将这些文件导入到 Objective-C 伞形头文件中——您的框架的主头文件。通过配置伞头文件导入您的 Objective-C 文件:

  • 在 Build Settings 下的 Packaging 中,确保框架目标的 Defines Module 设置设置为Yes
  • 在伞形标头中,导入您想要向 Swift 公开的每个 Objective-C 标头。

Swift 可以看到您在伞形标头中公开公开的每个标头。该框架中的 Objective-C 文件的内容可自动从该框架目标内的任何 Swift 文件中获得,无需导入语句。使用 Objective-C 代码中的类和其他声明,使用与系统类相同的 Swift 语法。

资源

附加信息


推荐阅读