Как реализовать выделение текста с помощью Touch Touch на PDF в Swift 4+ с использованием PDFKit? - PullRequest
0 голосов
/ 23 сентября 2019

Мы используем PDFKit для выделенного текста, но он не работает гладко.

Вот мой код.

 if(panGesture.state == UIGestureRecognizerState.changed)
        {
            page  = self.pdfView.document?.page(at: panGesture.view!.tag)
            if point.x > (page?.bounds(for: .cropBox).width)! - 10 {
                return
            }
            if let selection  = page?.selection(from: start_point_highlight ?? CGPoint.zero, to: point) {
                selection.color = UIColor.purple
                let rect  = (selection.bounds(for: page!))
                if selectionRect.contains(rect){

                }else{
                    if rect.size.width < 1 || rect.size.height > 25 {
                        return
                    }
                    selectionRect.append((selection.bounds(for: page!)))
                    self.addHighlightSelectionAnnotation(rect: (selection.bounds(for: page!)), page: page! , pageNumber:  panGesture.view!.tag)
                }
            }
        }

func addHighlightSelectionAnnotation(rect : CGRect , page : PDFPage , pageNumber : Int? = 0 , isLastWord : Bool = false, isRightToLeft : Bool = false) {
        let highlight = PDFAnnotation(bounds: updated_rect, forType: .highlight, withProperties: nil)
        highlight.endLineStyle = .square
        let dateFormat3 = DateFormatter()
        dateFormat3.dateFormat = "MMM d, h:mm a"
        let created_date = dateFormat3.string(from: Date())
        highlight_name.append(created_date)
        highlight.userName = highlight_name
        if  (self.slider_lineTransparency.value/100) > 0.9 {
            let clr = UIColor.init(hex: self.selectedColor as String)
            highlight.color = clr.withAlphaComponent(0.5)
        }else{
            let crl  = UIColor.init(hex: self.selectedColor as String)
            let alpha  = CGFloat(self.slider_lineTransparency.value/100)
            highlight.color = crl.withAlphaComponent(0.5)
        }
        let date = Date()
        let calendar = Calendar.current
        let hour = calendar.component(.hour, from: date)
        let minutes = calendar.component(.minute, from: date)
        let seconds = calendar.component(.second, from: date)
        highlight.backgroundColor = UIColor.clear
        page.addAnnotation(highlight)
    }

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

Если у вас есть предложения по реализации выделения текста PDF с использованием PDFKit в Swift4 +, то сообщите нам об этом треке.

...