@@ -24,8 +24,9 @@ final class OriginalViewController: UIViewController {
24
24
let backpageBtnViewModel : BackPageBtnViewModel
25
25
26
26
var cancellable : Set < AnyCancellable > = [ ]
27
+ var startPoint : CGPoint ?
27
28
28
- let mainPDFView : CustomPDFView = {
29
+ var mainPDFView : CustomPDFView = {
29
30
let view = CustomPDFView ( )
30
31
view. translatesAutoresizingMaskIntoConstraints = false
31
32
view. backgroundColor = . gray200
@@ -207,6 +208,12 @@ extension OriginalViewController {
207
208
pencilInteraction. isEnabled = true
208
209
pencilInteraction. delegate = self
209
210
self . view. addInteraction ( pencilInteraction)
211
+
212
+ // 하이라이트 제스처: UIPanGestureRecognizer
213
+ let panGesture = UIPanGestureRecognizer ( target: self , action: #selector( handlePanGesture ( _: ) ) )
214
+ panGesture. minimumNumberOfTouches = 1
215
+ panGesture. maximumNumberOfTouches = 1
216
+ mainPDFView. addGestureRecognizer ( panGesture)
210
217
}
211
218
212
219
/// 데이터 Binding
@@ -319,7 +326,7 @@ extension OriginalViewController {
319
326
320
327
// 하이라이트 기능 실행
321
328
NotificationCenter . default. publisher ( for: . PDFViewSelectionChanged)
322
- . debounce ( for: . milliseconds( 700 ) , scheduler: RunLoop . main)
329
+ . debounce ( for: . milliseconds( 200 ) , scheduler: RunLoop . main)
323
330
324
331
. sink { [ weak self] _ in
325
332
guard let self = self else { return }
@@ -505,6 +512,31 @@ extension OriginalViewController: UIGestureRecognizerDelegate {
505
512
viewModel. pdfDrawer. pdfView = self . mainPDFView
506
513
}
507
514
515
+ // 하이라이트 터치 관련
516
+ @objc func handlePanGesture( _ gesture: UIPanGestureRecognizer ) {
517
+ let location = gesture. location ( in: mainPDFView)
518
+ guard let page = mainPDFView. page ( for: location, nearest: true ) else { return }
519
+ let convertedPoint = mainPDFView. convert ( location, to: page)
520
+
521
+ switch gesture. state {
522
+ case . began:
523
+ self . startPoint = convertedPoint
524
+ case . changed:
525
+ guard let startPoint = startPoint else { return }
526
+ if let selection = page. selection ( from: startPoint, to: convertedPoint) {
527
+ mainPDFView. setCurrentSelection ( selection, animate: false )
528
+ }
529
+ case . ended:
530
+ guard let startPoint = startPoint else { return }
531
+ if let selection = page. selection ( from: startPoint, to: convertedPoint) {
532
+ let viewModel = MainPDFViewModel ( ) // 네 뷰모델 인스턴스 생성
533
+ viewModel. highlightText ( in: mainPDFView, with: . yellow) // 원하는 색상 선택
534
+ }
535
+ self . startPoint = nil
536
+ default :
537
+ break
538
+ }
539
+ }
508
540
}
509
541
510
542
//canPerformAction()으로 menuAction 제한
0 commit comments