现在你看到了我
NowYouSeeMe 是一个用 Swift 编写的视图跟踪框架,可以将单 API 添加到 UIView 的一个实例或其任何子类。视图还可以添加自定义的可视性条件和监听器。
理念
- 60 fps(所有计算都在后台线程上执行)
- 视图上没有可跟踪的包装器
- 视图注入的可视性规则
- 将可视性回调返回到视图(在主线程上)
- 简单易用的 API
使用方法
要在 UI 创建之前启用框架,您需要调用以下方法:
NowYou.seeMe() // didFinishLaunchingWithOptions is a good place to initialise the framework
视图
不再需要为跟踪可访问性创建自定义视图子类了。
跟踪视图现在就像这样简单:
view.trackView() // can be UIView or any of its subclasses
您还需要调用父 UIViewController 视图的 trackView 以管理基于视图控制器生命周期的可视性回调
override func viewDidLoad() {
super.viewDidLoad()
self.view.trackView()
}
滚动视图
如果您想跟踪滚动视图的子视图的可视性,也必须在滚动视图上调用 trackView()
scrollView.trackView() // can be UIScrollView, UITableView, UICollectionView, or any other scrollable view
这可以启用对滚动视图的 contentOffset
的跟踪,以计算子视图的正确可见性。
可回收视图
如果您想跟踪可回收视图的子视图的可视性,您还必须在可回收视图中调用 trackView()
。
cell.trackView() // can be UITableViewCell, UICollectionViewCell, or any other recyclable view
监听器
如果无法监听更改,则没有必要跟踪视图的可视性。
您可以在 trackView()
调用中将 ViewabilityListener
提供给视图以监听 viewStarted(:)
和 viewEnded(:)
事件。
class CustomListener: ViewabilityListener {
// view has entered the view port (visibility percentage > 0)
func viewStarted(_ view: UIView) {
view.backgroundColor = .green
}
// complete view has exited the viewport (visibility percentage == 0)
func viewEnded(_ view: UIView) {
view.backgroundColor = .red
}
}
view.trackView(CustomListener()) // listener attached to the view
条件
想要更多地控制可视性回调吗?
您可以在 trackView()
调用中为视图提供您自定义的 ViewCondition
。
class CustomCondition: ViewCondition {
func evaluate(for state: ScrollState, viewPercentage: Float) {
// custom evaluation here based on scroll state and visible view percentage
}
}
view.trackView(conditions: [CustomCondition()]) // view condition added to the view
默认条件
提供了一些默认视图条件以帮助您节省计算。
API 文档
NowYouSeeMe 的完整文档可在此处找到。
更多信息可在Wiki 部分找到。
安装
要将NowYouSeeMe集成到您的Xcode项目中使用CocoaPods,请在您的Podfile
中指定它。
pod 'NowYouSeeMe'
然后,运行以下命令
$ pod install
依赖项
要求
- iOS 10.0+
- Swift 5