Swift PDFView скачет, когда кадр анимирован - PullRequest
0 голосов
/ 26 марта 2020

У меня есть приложение с полноэкранным режимом просмотра PDF, и я пытаюсь добавить анимируемую панель вкладок в верхней части экрана. Однако всякий раз, когда я анимирую рамку PDFView, чтобы показать панель вкладок, PDF, загруженный в виде, переходит на другую позицию.

Я пытался анимировать с помощью UIView.animate и UIViewPropertyAnimator и добавив PDFView. в качестве подпредставления и анимации родителя, но все они приводят к одной и той же проблеме.

Кто-нибудь сталкивался с этой проблемой? Любые идеи о том, как создать анимацию таким образом, чтобы обеспечить плавное взаимодействие с пользователем? Панель вкладок, очевидно, может анимировать себя поверх PDFView, но мне не нравится, что она охватывает PDF.

enter image description here

Спасибо!

func CreatePDFView() {
    pdfView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
    view.addSubview(pdfView)
}
func AnimatePDFView() {
    UIView.animate(withDuration: 1) {
        self.pdfView.frame = CGRect(x: 0, y: 40, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height - 40)
    }
}

1 Ответ

0 голосов
/ 26 марта 2020

Я искал возможность добавить эту функцию в течение нескольких месяцев, но не смог решить эту проблему. Однако, как только я задал этот вопрос, кажется, что я это сделал.

Вам необходимо анимировать pdfView.documentView? .Frame и компенсировать текущий кадр. Я сделал это с UIEdgeInsets, и, похоже, он работает.

if tabDocumentBrowserIsVisible {
        tabDocumentBrowser.Animate(toState: .hidden)
        UIView.animate(withDuration: 0.3) {
            let inset = UIEdgeInsets(top: -80, left: 0, bottom: 0, right: 0)
            self.pdfView.documentView?.frame = self.pdfView.documentView?.frame.inset(by: inset) as! CGRect
        }
        tabDocumentBrowserIsVisible = false
    } else {
        tabDocumentBrowser.Animate(toState: .visible)
        UIView.animate(withDuration: 0.3) {
            let inset = UIEdgeInsets(top: 80, left: 0, bottom: 0, right: 0)
            self.pdfView.documentView?.frame = self.pdfView.documentView?.frame.inset(by: inset) as! CGRect
        }
        tabDocumentBrowserIsVisible = true
    }

PDF все равно ведет себя немного забавно, если вы прокручиваете его во время анимации, но это не так уж плохо.

...