[swift] PeekPop을 활용한 3D 터치 기능 구현 방법

iOS 기기에서는 3D 터치라는 기능을 사용하여 사용자가 앱 내에서 더 나은 상호작용을 할 수 있습니다. 3D 터치를 사용하면 앱 아이콘을 강한 강압으로 누르는 것 외에도 다른 많은 기능을 사용할 수 있습니다. 이 기능 중 하나는 PeekPop이라고 불리는 기능으로, 사용자가 앱의 특정 콘텐츠를 볼 수 있도록 해줍니다.

이번 포스트에서는 Swift 언어를 사용하여 PeekPop을 활용한 3D 터치 기능을 구현하는 방법을 알아보겠습니다.

1. 미리보기 등록

PeekPop을 사용하기 위해서는 우선 해당 뷰 컨트롤러에서 미리보기 등록을 해야 합니다. PeekPop은 UIViewControllerPreviewingDelegate 프로토콜을 준수하는 클래스를 사용하여 동작합니다. AppDelegate.swift 파일을 열고 다음 코드를 추가해 미리보기 등록을 해보세요.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    let viewController = ViewController()
    let previewingContext = self.window?.rootViewController?.registerForPreviewing(with: viewController, sourceView: viewController.view)

    return true
}

위 코드에서 ViewController는 PeekPop을 구현할 뷰 컨트롤러를 의미합니다. 이제 미리보기 등록이 완료되었습니다.

2. 특정 콘텐츠에 PeekPop 적용하기

이제 뷰 컨트롤러에 특정 콘텐츠에 PeekPop을 적용해보겠습니다. ViewController.swift 파일을 열고 다음 코드를 추가해주세요.

import UIKit

class ViewController: UIViewController, UIViewControllerPreviewingDelegate {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // PeekPop 제스처 등록
        self.registerForPreviewing(with: self, sourceView: self.view)
    }
    
    // PeekPop 제스처 핸들러
    func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
        
        // PeekViewController 생성
        guard let peekViewController = storyboard?.instantiateViewController(withIdentifier: "peekViewController") as? PeekViewController else {
            return nil
        }
        
        // 피크 뷰 컨트롤러에 전달할 데이터 설정
        let data = "This is a peek preview"
        peekViewController.data = data
        
        // 피크 뷰 컨트롤러 크기 설정
        peekViewController.preferredContentSize = CGSize(width: 0.0, height: 300)
        
        return peekViewController
    }
    
    // Pop 제스처 핸들러
    func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {
        self.show(viewControllerToCommit, sender: self)
    }
    
}

위 코드에서 PeekViewController는 PeekPop 기능이 적용되는 콘텐츠를 나타내는 뷰 컨트롤러를 의미합니다. PeekViewController에서는 원하는 콘텐츠나 데이터를 표시할 수 있습니다.

위 코드에서는 PeekPop 제스처 핸들러인 previewingContext(_:viewControllerForLocation:) 메서드를 구현하여 피크 뷰 컨트롤러를 생성하고 데이터와 크기를 설정합니다. 또한 Pop 제스처 핸들러인 previewingContext(_:commit:) 메서드를 구현하여 피크 뷰 컨트롤러를 화면에 표시합니다.

3. 피크 뷰 컨트롤러 생성

이제 피크 뷰 컨트롤러를 생성하여 콘텐츠를 나타내는 뷰를 구성해보겠습니다. Main.storyboard 파일을 열고 뷰 컨트롤러를 추가한 다음 Identity Inspector에서 Class를 PeekViewController로 변경해주세요. 그리고 뷰 컨트롤러에 원하는 콘텐츠를 추가해주세요.

4. 실행 및 테스트

이제 앱을 실행하고 3D 터치로 미리 등록한 뷰 컨트롤러의 특정 콘텐츠를 강압해보세요. PeekViewController가 피크 뷰로 화면에 표시될 것입니다. 또한 피크 뷰를 더 강하게 누르면 해당 콘텐츠로 진입하는 Pop 동작도 확인할 수 있습니다.

이렇게 Swift 언어로 PeekPop을 활용한 3D 터치 기능을 구현하는 방법에 대해 알아보았습니다. 여러분도 이를 참고하여 앱의 상호작용을 보다 향상시켜보세요!

참고 자료