Skip to content

Commit 1830b27

Browse files
committed
[#471] 하이라이트 터치 제스처 변경 및 충돌 해결
1 parent 82c61bc commit 1830b27

File tree

1 file changed

+34
-2
lines changed

1 file changed

+34
-2
lines changed

Presentation/OriginalPaper/OriginalViewController.swift

+34-2
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ final class OriginalViewController: UIViewController {
2424
let backpageBtnViewModel: BackPageBtnViewModel
2525

2626
var cancellable: Set<AnyCancellable> = []
27+
var startPoint: CGPoint?
2728

28-
let mainPDFView: CustomPDFView = {
29+
var mainPDFView: CustomPDFView = {
2930
let view = CustomPDFView()
3031
view.translatesAutoresizingMaskIntoConstraints = false
3132
view.backgroundColor = .gray200
@@ -207,6 +208,12 @@ extension OriginalViewController {
207208
pencilInteraction.isEnabled = true
208209
pencilInteraction.delegate = self
209210
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)
210217
}
211218

212219
/// 데이터 Binding
@@ -319,7 +326,7 @@ extension OriginalViewController {
319326

320327
// 하이라이트 기능 실행
321328
NotificationCenter.default.publisher(for: .PDFViewSelectionChanged)
322-
.debounce(for: .milliseconds(700), scheduler: RunLoop.main)
329+
.debounce(for: .milliseconds(200), scheduler: RunLoop.main)
323330

324331
.sink { [weak self] _ in
325332
guard let self = self else { return }
@@ -505,6 +512,31 @@ extension OriginalViewController: UIGestureRecognizerDelegate {
505512
viewModel.pdfDrawer.pdfView = self.mainPDFView
506513
}
507514

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+
}
508540
}
509541

510542
//canPerformAction()으로 menuAction 제한

0 commit comments

Comments
 (0)