CTPanoramaView
CTPanoramaView是一个高性能库,它使用SceneKit来展示基于触摸或动作控制的完整球形或柱状全景图。
要求
- iOS 8.0+
- 版本1.0需要Xcode 8.0和Swift 3.0
- 版本1.1需要XCode 9.0和Swift 4.0
- 版本1.2需要XCode 10.0和Swift 4.2
- 版本1.3需要XCode 10.0和Swift 5.0
CTPanoramaView可以从Objective-C和Swift代码中使用。
安装
使用CocoaPods
要使用CocoaPods安装CTPanoramaView,请在Podfile中添加以下行
pod "CTPanoramaView", "~> 1.5"
然后运行pod install
命令,并从现在开始使用创建的工作区打开您的项目。
手动安装
只需将文件 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
默认的控制方式是触摸控制。可以在全景图显示在屏幕上时动态更改控制方式。当更改控制方式时,可显示部分将自动重置。
当使用触摸控制时,您可以使用CTPanoramaView的startAngle
属性设置观众的起始角度,单位为弧度。在基于运动的控制模式下,此属性将被忽略。
方向支持
支持所有方向。方向更改将自动处理。因此,您无需担心方向更改后事物变得混乱。
指南针
如果您想显示显示用户当前场合范围的指南针,请使用compass
属性。当您将该属性设置为符合CTPanoramaCompass
协议的自定义UIView
子类时,无论何时旋转或场合范围之一发生变化,视图都会自动提供旋转和场合范围角度。
// compassView is a custom view that conforms to the `CTPanoramaCompass` protocol.
panaromaView.compass = compassView
此协议只包含一个方法,即updateUI(rotationAngle:fieldOfViewAngle:)
。这里,rotationAngle
是在垂直轴周围的旋转量,而fieldOfViewAngle
是相机的水平FoV角度。这两个值都在弧度中。
您可以在提供的CTPieSliceView
类中看到一个指南针的示例实现。将其添加到视图层次结构中,并在您的CTPanoramaView
实例之上将其设置为指南针。您会看到它可以准确地显示当前FoV。以下是CTPieSliceView
在其默认配置下的外观
CTPieSliceView
有多个可自定义的属性,例如sliceColor
、outerRingColor
和bgColor
,所有这些都可以通过其实时渲染支持从界面构建器中进行修改。
覆盖视图
还有一个名为overlayView
的便利属性,可以用来添加一个放在全景视图顶部的自定义视图。当使用触摸控制时,您需要确保覆盖视图不“消费”它接收到的触摸,以便CTPanoramaView
实例能够正确地接收触摸事件。
如何贡献
从 dev 分支创建一个功能分支,然后向我发送 pull request。我不会直接将 pull request 合并到 master 分支,所以请勿在那边进行更改。