默认的Core Graphics方法告诉当前活动的pdf页码。是否有任何方法可以获取页面指示器显示的当前活动页码。还有什么办法可以隐藏页面指示器吗? Objective-C中的答案将不胜感激。
感谢] 1
答案 0 :(得分:2)
Swift 5.1
一个简单的解决方案
@IBOutlet var pageNumber: NSTextField!
let curPg = self.thePDFView.currentPage?.pageRef?.pageNumber
pageNumber.stringValue = "Page \(String(describing: curPg!))"
答案 1 :(得分:0)
目标C
Entry
设置代理
CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef)[NSURL fileURLWithPath:@"pdf path"]);
int pageCount = CGPDFDocumentGetNumberOfPages(pdf);
CGPDFDocumentRelease(pdf);
实施self.webView.delegate = self;
方法,您将获得以下页面计数...
webViewDidFinishLoad
其他
的Swift版本从pdf文件中获取页数。
- (void)webViewDidFinishLoad:(UIWebView *)webView {
NSInteger pageCount = webView.pageCount;
//OR
NSInteger count_horizontal = webView.scrollView.contentSize.width / webView.scrollView.frame.size.width;
NSInteger count_verticel = webView.scrollView.contentSize.height / webView.scrollView.frame.size.height;
}
在网络视图中显示pdf并设置其代理
guard var pdf = CGPDFDocument(URL(fileURLWithPath: "pdf path") as CFURL) else {
print("Not able to load pdf file.")
return
}
let pageCount = CGPDFDocumentGetNumberOfPages(pdf);
实施 self.webView.delegate = self;
方法,您将获得以下页面计数...
webViewDidFinishLoad
答案 2 :(得分:0)
在PDFKit中很容易获得页码。请找到以下代码片段。
print(pdfDocument!.index(for: pdfView.currentPage!)
答案 3 :(得分:0)
这是一个古老的问题,答案应该在Objc中,但是我不得不在Swift中做一个非常相似的方法,这是我的解决方案。
首先,我为容器创建了一个出口,为当前页面创建了一个标签,为当前页面创建了另一个标签;
@IBOutlet weak var pageInfoContainer: UIView!
@IBOutlet weak var currentPageLabel: UILabel!
@IBOutlet weak var totalPagesLabel: UILabel!
还有一个定时器,将在上面进行解释;
private var timer: Timer?
要在更改后尽快获取当前页面,您需要添加观察者;
NotificationCenter.default.addObserver(self, selector: #selector(handlePageChange), name: Notification.Name.PDFViewPageChanged, object: nil)
不要忘记删除viewWillDisappear中的观察者!
现在一切就绪,让我们应用一些逻辑!
这是我的pdfView设置;
private func setupPdfView() {
if let pdf: PDFDocument = pdfDocument {
pdfView.autoScales = true
pdfView.backgroundColor = .clear
pdfView.document = pdf
pdfView.usePageViewController(true, withViewOptions: nil)
}
if let totalPages: Int = pdfView.document?.pageCount {
totalPagesLabel.text = String(totalPages)
}
}
将通过观察者处理pageChange的方法;
@objc func handlePageChange() {
if let currentPage: PDFPage = pdfView.currentPage, let pageIndex: Int = pdfView.document?.index(for: currentPage) {
UIView.animate(withDuration: 0.5, animations: {
self.pageInfoContainer.alpha = 1
}) { (finished) in
if finished {
self.startTimer()
}
}
currentPageLabel.text = String(pageIndex + 1)
}
}
最后是计时器和方法;
private func startTimer() {
timer?.invalidate()
timer = Timer.scheduledTimer(timeInterval: 2.0, target: self, selector: #selector(whenTimerEnds), userInfo: nil, repeats: false)
}
@objc func whenTimerEnds() {
UIView.animate(withDuration: 1) {
self.pageInfoContainer.alpha = 0
}
}
请记住,计时器被用作“糖果”,并且是完全可选的,这将在同一页面X秒钟后删除计数器
保持安全!