You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS开发:如何检测PDFView页面滑动并隐藏PDFThumbnailView?

解决PDFView滑动翻页时隐藏PDFThumbnailView的问题

哈哈,我懂你的困扰!确实PDFViewDelegate里没有直接提供页面滑动开始/结束的回调方法,但咱们可以通过两种靠谱的方式实现需求:

方法一:用KVO监听currentPage的变化

当用户滑动翻页时,PDFView的currentPage属性肯定会更新,我们可以通过键值观察(KVO)来捕捉这个变化,然后触发隐藏缩略图的操作:

  1. 先在视图控制器的viewDidLoad里添加上监听:
override func viewDidLoad() {
    super.viewDidLoad()
    // 假设你的PDFView实例叫pdfView,缩略图视图是thumbnailView
    pdfView.addObserver(self, forKeyPath: "currentPage", options: [.old, .new], context: nil)
}
  1. 然后实现KVO的回调方法:
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    guard keyPath == "currentPage", 
          let newPage = change?[.newKey] as? PDFPage, 
          let oldPage = change?[.oldKey] as? PDFPage,
          newPage != oldPage else {
        return
    }
    // 确认是切换到了新页面,直接隐藏缩略图
    thumbnailView.isHidden = true
}
  1. 别忘了在控制器销毁时移除监听,避免内存泄漏:
deinit {
    pdfView.removeObserver(self, forKeyPath: "currentPage")
}

方法二:监听UIPageViewController的页面切换通知

既然你开启了usePageViewController(true, withViewOptions: nil),PDFView内部其实是用UIPageViewController来管理页面切换的,我们可以监听它的过渡完成通知:

  1. 同样在viewDidLoad里注册通知:
override func viewDidLoad() {
    super.viewDidLoad()
    NotificationCenter.default.addObserver(
        self,
        selector: #selector(onPageDidFinishAnimating),
        name: NSNotification.Name.UIPageViewControllerDidFinishAnimating,
        object: nil
    )
}
  1. 实现通知的处理方法:
@objc func onPageDidFinishAnimating(notification: NSNotification) {
    guard let pageVC = notification.object as? UIPageViewController,
          pageVC.parent === pdfView else {
        // 过滤掉其他页面控制器的通知
        return
    }
    // 确认是当前PDFView的页面切换,隐藏缩略图
    thumbnailView.isHidden = true
}
  1. 销毁时记得移除通知监听:
deinit {
    NotificationCenter.default.removeObserver(self)
}

额外小优化(可选)

如果你希望用户点击PDF内容时能重新显示缩略图,可以给PDFView加个点击手势:

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(toggleThumbnailVisibility))
pdfView.addGestureRecognizer(tapGesture)

@objc func toggleThumbnailVisibility() {
    thumbnailView.isHidden.toggle()
}

这样就完美实现滑动翻页隐藏缩略图,点击屏幕切换显示状态的需求啦~

内容的提问来源于stack exchange,提问作者heyfrank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:27:41