@@ -23,8 +23,9 @@ final class OriginalViewController: UIViewController {
23
23
let indexViewModel : IndexViewModel
24
24
25
25
var cancellable : Set < AnyCancellable > = [ ]
26
+ var startPoint : CGPoint ?
26
27
27
- let mainPDFView : CustomPDFView = {
28
+ var mainPDFView : CustomPDFView = {
28
29
let view = CustomPDFView ( )
29
30
view. translatesAutoresizingMaskIntoConstraints = false
30
31
view. backgroundColor = . gray200
@@ -199,6 +200,12 @@ extension OriginalViewController {
199
200
let commentTapGesture = UITapGestureRecognizer ( target: self , action: #selector( handleCommentTap ( _: ) ) )
200
201
commentTapGesture. delegate = self
201
202
self . view. addGestureRecognizer ( commentTapGesture)
203
+
204
+ // 하이라이트 제스처: UIPanGestureRecognizer
205
+ let panGesture = UIPanGestureRecognizer ( target: self , action: #selector( handlePanGesture ( _: ) ) )
206
+ panGesture. minimumNumberOfTouches = 1
207
+ panGesture. maximumNumberOfTouches = 1
208
+ mainPDFView. addGestureRecognizer ( panGesture)
202
209
}
203
210
204
211
/// 데이터 Binding
@@ -263,7 +270,7 @@ extension OriginalViewController {
263
270
264
271
// 하이라이트 기능 실행
265
272
NotificationCenter . default. publisher ( for: . PDFViewSelectionChanged)
266
- . debounce ( for: . milliseconds( 700 ) , scheduler: RunLoop . main)
273
+ . debounce ( for: . milliseconds( 200 ) , scheduler: RunLoop . main)
267
274
268
275
. sink { [ weak self] _ in
269
276
guard let self = self else { return }
@@ -460,6 +467,32 @@ extension OriginalViewController: UIGestureRecognizerDelegate {
460
467
print ( " No match comment annotation " )
461
468
}
462
469
}
470
+
471
+ // 하이라이트 터치 관련
472
+ @objc func handlePanGesture( _ gesture: UIPanGestureRecognizer ) {
473
+ let location = gesture. location ( in: mainPDFView)
474
+ guard let page = mainPDFView. page ( for: location, nearest: true ) else { return }
475
+ let convertedPoint = mainPDFView. convert ( location, to: page)
476
+
477
+ switch gesture. state {
478
+ case . began:
479
+ self . startPoint = convertedPoint
480
+ case . changed:
481
+ guard let startPoint = startPoint else { return }
482
+ if let selection = page. selection ( from: startPoint, to: convertedPoint) {
483
+ mainPDFView. setCurrentSelection ( selection, animate: false )
484
+ }
485
+ case . ended:
486
+ guard let startPoint = startPoint else { return }
487
+ if let selection = page. selection ( from: startPoint, to: convertedPoint) {
488
+ let viewModel = MainPDFViewModel ( ) // 네 뷰모델 인스턴스 생성
489
+ viewModel. highlightText ( in: mainPDFView, with: . yellow) // 원하는 색상 선택
490
+ }
491
+ self . startPoint = nil
492
+ default :
493
+ break
494
+ }
495
+ }
463
496
}
464
497
465
498
//canPerformAction()으로 menuAction 제한
0 commit comments