CTPanoramaView
CTPanoramaView是一个高性能库,使用SceneKit通过触摸或基于运动的控制来显示完整球面或圆柱形全景。
需求
- iOS 10.0+
- Swift 5.0
CTPanoramaView可从Objective-C和Swift代码中使用。
安装
使用Carthage
要使用Carthage安装CTPanoramaView,将以下行添加到Cartfile中。
github "scihant/CTPanoramaView" ~> 1.5
然后运行carthage update
命令来构建框架,并将生成的CTPanoramaView.framework
拖入您的Xcode项目。
使用 CocoaPods
要使用 CocoaPods 安装 CTPanoramaView,请将以下行添加到您的 Podfile 中
pod "CTPanoramaView", "~> 1.5"
然后运行 pod install
命令,并使用创建的 workspace 从现在开始打开您的项目。
手动安装
只需将文件 CTPanoramaView.swift
(如果您想将其作为指南针视图使用,还可以添加 CTPieSliceView.swift
)添加到您的项目。
运行示例项目
示例项目位于 Example 目录中。框架目标已经作为依赖项添加到其中,因此您可以直接运行它。
用法
在代码中或使用 Storyboard/Nib 创建 CTPanoramaView
的实例。
然后加载全景图像并将其设置为 CTPanoramaView 实例的图像
// Create an instance of CTPanoramaView called "panoramaView" somewhere
// ...
let image = UIImage(named: "panoramicImage.png")
panaromaView.image = image
配置
全景类型
CTPanoramaView 支持两种全景图像
- 球面全景(也称为 360 度照片)
- 圆柱形全景
所有全景图应为完整的。支持率不高的全景图(视角小于360°的全景图)不被支持。对于球形全景,图像应使用等角圆柱投影。不支持立方格式。
CTPanoramaView会通过查看图像的纵横比自动判断给出的图像是球形全景还是圆柱形全景。如果是2:1的比例,则认为它是球形全景。如果您想覆盖这个默认值,请在设置图像后更改panoramaType
属性的值。
panaromaView.panoramaType = .spherical // or .cylindrical
控制方法
CTPanoramaView允许用户以两种不同的方式导航全景图。要更改控制方法,使用controlMethod
属性。
panaromaView.controlMethod = .touch // Touch based control
panaromaView.controlMethod = .motion // Accelerometer & gyroscope based control
panaromaView.controlMethod = .both // Accelerometer & gyroscope based control with finger movement support
默认控制方法是基于触摸的控制。您可以在全景图正在屏幕上显示时实时更改控制方法。在更改控制方法期间,可见部分将自动重置。
在基于触摸的控制中,您可以使用CTPanoramaView的startAngle
属性设置观看者的起始角度(以弧度为单位)。在基于运动的控制模式中,此属性会被忽略。
方向支持
所有方向均受支持。方向变化将自动处理。因此,您不必担心在方向更改后出现混乱。
指南针
如果您要显示一个显示用户当前视角的指南针,请使用compass
属性。当您将该属性设置为符合CTPanoramaCompass
协议的自定义UIView
子类时,视图将自动接收到旋转角度和视角角度,每当其中之一发生变化时。
// compassView is a custom view that conforms to the `CTPanoramaCompass` protocol.
panaromaView.compass = compassView
该协议只包含一个方法,即updateUI(rotationAngle:fieldOfViewAngle:)
。在这里,rotationAngle
是围绕垂直轴旋转的量,fieldOfViewAngle
是相机的水平视角角度。这两个值都是以弧度为单位。
您可以在提供的CTPieSliceView
类中看到一个指南针的示例实现。请将其添加到视图层次结构中,并在您的CTPanoramaView
实例上方,然后将其设置为指南针。您会看到它准确地显示了当前FoV。以下是默认配置下的CTPieSliceView
的外观:
CTPieSliceView
具有多种可自定义属性,例如 sliceColor
(切片颜色)、outerRingColor
(外环颜色)和bgColor
(背景颜色),所有这些都可以通过界面构建器的实时渲染支持来进行修改。
遮罩视图
还有一个名为 overlayView
的便利属性,可以用来添加一个覆盖全景视图的定制视图。当使用基于触摸的控制时,您需要确保遮罩视图不会“消费”收到的触摸,这样CTPanoramaView
实例才能正确接收触摸事件。
如何参与贡献
从开发分支创建一个功能分支,然后向我发送拉取请求。我不会直接合并到master分支,所以请不要在那里进行更改。