Я реализовал проект. Я использовал PDFKIT, чтобы сделать кое-что, как добавить плавающее текстовое поле в pdf, и он может перемещаться по прикосновению пользователя к экрану, используя GestureRecognizer
для перемещения и размещения там, где пользователи решают. до iOS 13 он отлично работал, но после этого он не дает возможности переместить текстовое поле, и я пробовал много способов решить его, но все не удалось.
Кажется, что проблема как-то связана с GestureRecognizer
, но я не уверен, а также я действительно не знаю, как это исправить. Я работал над этим проектом на github https://github.com/kishikawakatsumi/BookReader и попытался как-то его расширить.
и вот мой проект кодов, я вставляю все функции, я знаю, что это кажется немного сложным. Очень сожалею об этом. Но если вы думаете, что это может быть из распознавателя жестов, просто посмотрите на коды, принадлежащие этим функциям.
func getPDFFrame(todo: String)
{
let pdfSubVws = pdfView.subviews
print("subVws ",pdfSubVws)
for subVws in pdfSubVws
{
if (String(describing: subVws).range(of:"UIPageViewControllerContentView") != nil)
{
let pageVc = subVws.subviews
for subVws in pageVc
{
if (String(describing: subVws).range(of:"UIQueuingScrollView") != nil)
{
let QueueVc = subVws.subviews
// print("QueueVcQueueVc ", QueueVc)
for subVws in QueueVc
{
if (String(describing: subVws).range(of:"UIView") != nil)
{
let viewVc = subVws.subviews
print("\n\nviewVcVcQueueVc ", viewVc) //viewVcVcQueueVc []
for subVws in viewVc
{
if (String(describing: subVws).range(of:"UIView") != nil)
{
let SubviewVc = subVws.subviews
// print("\n\nSubviewVcSubviewVc ", SubviewVc)
for subVws in SubviewVc
{
if (String(describing: subVws).range(of:"UIScrollView") != nil)
{
let finalVw = subVws.subviews
// print("\n\nfinalVw ", finalVw)
//
for subVws in finalVw
{
if (String(describing: subVws).range(of:"UIView") != nil)
{
// print("subVwssubVws ", subVws)
let pagView = subVws.subviews
// pdfLandingView =
for subVws in pagView
{
// print("\n\n EndVwssubVws ", subVws)
if (String(describing: subVws).range(of:"PDFPageView") != nil)
{
let pageLandVw = subVws.subviews
print("\n\n WasVwssubVws ", pageLandVw)
// hideBars()
// Myedit()
for subVws in pageLandVw
{
if (String(describing: subVws).range(of:"UITextView") != nil)
{
print("dddddddd")
let txtVw = subVws as! UITextView
if todo == "firstResponder"
{
let rect = pdfView.currentPage?.bounds(for: .mediaBox)
usingHeightText = txtVw.frame.size.height
usingWidthText = txtVw.frame.size.width
let xPoint = txtVw.frame.origin.x
let yPoint = (rect?.height)! - (txtVw.frame.origin.y) - txtVw.frame.size.height
lastTextAnnoPoint = CGPoint(x: xPoint, y: yPoint)
findHavingTextAnnotation(annoPoint: CGPoint(x: xPoint, y: yPoint))
// txtVw.contentInset = UIEdgeInsetsMake(0, 10, 0, 0)
print("C_Sz ", txtVw.contentSize)
print("C_Off ", txtVw.contentOffset)
let widthMoveView = UIView(frame: CGRect(x: txtVw.frame.size.width - 20, y: 0, width: 20, height: txtVw.frame.size.height))
widthMoveView.backgroundColor = UIColor.brown.withAlphaComponent(0.0)
widthMoveView.tag = 333
let wdImgVw = UIImageView()
wdImgVw.frame.origin.x = 0
wdImgVw.frame.origin.y = 8
wdImgVw.frame.size.width = 20 // widthMoveView.frame.width
wdImgVw.frame.size.height = 20 // widthMoveView.frame.height
wdImgVw.contentMode = .scaleAspectFit
wdImgVw.image = UIImage(named: "widthLeftRight")
wdImgVw.layer.cornerRadius = 10
// wdImgVw.backgroundColor = UIColor.orange
widthMoveView.addSubview(wdImgVw)
txtVw.addSubview(widthMoveView)
//
let tapVw = UIPanGestureRecognizer(target: self, action: #selector(self.handleWidthTapVw(_:)))
widthMoveView.addGestureRecognizer(tapVw)
}
else
//....and here I am going to omit the other parts of my codes
и здесь я собираюсь опустить другие части моих кодов, потому что кажется, что проблема возникает в этой строке кода
for subVws in finalVw
, а здесь других частей моих кодов нетуверен, что вам это может понадобиться или нет
let linkAnn = PDFAnnotation.init(bounds: CGRect(x: 150, y: 450, width: 180, height: usingHeightText), forType: PDFAnnotationSubtype.widget, withProperties: nil)
linkAnn.widgetFieldType = .text
linkAnn.isMultiline = true
linkAnn.contents = "fileNumber\(pdfClickedRow)PageNumber\(getPagenumber)addtext\(AddTextCount)" //"\(AddTextCount)"
linkAnn.widgetStringValue = NSLocalizedString("placeholder", comment: "")
linkAnn.font = UIFont(name: usingFontName, size: CGFloat(usingFontSize))
linkAnn.fontColor = usingFontColor
linkAnn.backgroundColor = usingBGFontColor.withAlphaComponent(usingBGFontAlpha)
linkAnn.setValue("addtext\(AddTextCount)", forAnnotationKey: PDFAnnotationKey.name)
// print("linkAnn.cont ",linkAnn.contents)
let index = pdfDocument?.index(for: pdfView.currentPage!)
pdfView.document?.page(at: index!)?.addAnnotation(linkAnn)
var createdColorDict = [String : Any]()
createdColorDict["BGColor"] = usingBGFontColor
createdColorDict["BGOpacity"] = usingBGFontAlpha
textAnnoStoredDict["fileNumber\(pdfClickedRow)PageNumber\(getPagenumber)addtext\(AddTextCount)"] = createdColorDict
// pdfView.currentPage?.addAnnotation(linkAnn)
bottomColorView.isHidden = true
bottomColorView.backgroundColor = UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha: 1.0)
sideWidthHeightVw.backgroundColor = UIColor(red: 240/255, green: 240/255, blue: 240/255, alpha: 1.0)
sideWidthHeightVw.isHidden = true
barHideOnTapGestureRecognizer.isEnabled = false
hideBars()
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow),
name: NSNotification.Name.UIKeyboardWillShow, object: nil)
//keyboardWillShow