[swift] PeekPop을 이용한 건강 관리 앱의 운동 기록 확인 기능 구현 방법

이번 포스트에서는 SwiftUI와 PeekPop을 이용하여 운동 기록 확인 기능을 구현하는 방법에 대해 알아보겠습니다. PeekPop은 사용자가 터치로 더 많은 정보를 얻을 수 있도록 3D Touch를 활용하는 기술입니다. PeekPop을 이용하여 앱 사용자들이 운동 기록을 확인할 수 있는 기능을 추가해보겠습니다.

참고 자료

  1. Apple Developer Documentation - SwiftUI
  2. Apple Developer Documentation - PeekPop

구현 방법

  1. 먼저, SwiftUI에서 PeekPop을 사용하기 위해 3D Touch를 지원하는 기기인지 확인해야 합니다. 아래와 같은 코드를 사용하여 확인할 수 있습니다.
if UITraitCollection.current.forceTouchCapability == .available {
    // 3D Touch support
} else {
    // No 3D Touch support
}
  1. PeekPop을 사용하기 위해 다음과 같이 UIViewControllerPreviewingDelegate 프로토콜을 채택해야 합니다.
class ExerciseRecordViewController: UIViewController, UIViewControllerPreviewingDelegate {
    // ...
}
  1. PeekPop을 사용하고자 하는 View에서 아래와 같이 registerForPreviewing(with:sourceView:) 메서드를 호출하여 PeekPop 기능을 등록합니다. sourceView는 PeekPop이 발생할 View를 나타냅니다.
override func viewDidLoad() {
    super.viewDidLoad()
    
    if traitCollection.forceTouchCapability == .available {
        registerForPreviewing(with: self, sourceView: self.view)
    }
}
  1. 이제 PeekPop 기능을 구현합니다. UIViewControllerPreviewingDelegate 프로토콜의 previewingContext(_:viewControllerForLocation:) 메서드를 구현하여 PeekPop이 발생했을 때 보여줄 뷰 컨트롤러를 리턴합니다. 이 때 UIStoryboard를 사용하여 해당 뷰 컨트롤러를 가져올 수 있습니다.
func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
    guard let indexPath = self.tableView.indexPathForRow(at: location),
          let workoutVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "WorkoutViewController") as? WorkoutViewController else {
        return nil
    }
    
    let selectedWorkout = self.workouts[indexPath.row]
    workoutVC.workout = selectedWorkout
    
    return workoutVC
}
  1. 마지막으로 PeekPop이 발생했을 때 어떻게 표시할지를 정의해야 합니다. previewingContext(_:commit:) 메서드를 구현하여 사용자가 PeekPop 화면을 선택했을 때 어떤 동작을 수행할지를 정의할 수 있습니다.
func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {
    navigationController?.pushViewController(viewControllerToCommit, animated: true)
}

위와 같은 방법으로 SwiftUI와 PeekPop을 이용하여 운동 기록 확인 기능을 구현할 수 있습니다. PeekPop을 사용하면 사용자가 앱의 운동 기록을 더 쉽게 확인할 수 있어 편리하게 이용할 수 있습니다.