[swift] Swift Presentr와 함께 사용하는 실시간 위치 추적 기능 구현 방법

Swift Presentr는 iOS 애플리케이션에서 사용하기 쉬운 커스텀 모달 프레젠테이션 라이브러리입니다. 이 라이브러리를 사용하여 실시간 위치 추적 기능을 구현하는 방법을 알아보겠습니다.

1. Presentr 라이브러리 추가하기

첫째로, Presentr 라이브러리를 프로젝트에 추가해야 합니다. Presentr의 최신 버전을 Cocoapods를 통해 설치할 수 있습니다. Podfile에 다음 줄을 추가하고, 터미널에서 pod install 커맨드를 실행하세요.

pod 'Presentr'

2. Location Manager 설정하기

실시간 위치 추적을 위해 Core Location 프레임워크를 사용해야 합니다. 먼저 위치 관리자를 초기화하고 권한을 요청해야 합니다. ViewController 클래스의 viewDidLoad 메서드에서 다음 코드를 추가합니다.

import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {
    let locationManager = CLLocationManager()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.startUpdatingLocation()
    }
}

3. Presentr로 모달 뷰 컨트롤러 표시하기

모달로 표시할 뷰 컨트롤러에는 위치 정보를 실시간으로 보여주는 UI가 포함되어야 합니다. 이 예시에서는 MapViewController를 사용합니다. ViewController에서 버튼을 누를 때마다 모달로 MapViewController를 표시하는 코드를 추가합니다.

import Presentr

class ViewController: UIViewController {
    let presenter: Presentr = {
        let presenter = Presentr(presentationType: .popup)
        presenter.transitionType = .crossDissolve
        presenter.dismissTransitionType = .crossDissolve
        presenter.backgroundOpacity = 0.5
        presenter.dismissOnSwipe = true
        return presenter
    }()
    
    @IBAction func showMapButtonTapped(_ sender: UIButton) {
        let mapVC = MapViewController()
        customPresentViewController(presenter, viewController: mapVC, animated: true, completion: nil)
    }
}

4. MapViewController에서 위치 정보 사용하기

MapViewController에서 Core Location을 사용하여 실시간 위치 정보를 받아와 지도에 표시할 수 있습니다. MapViewController를 다음과 같이 구현합니다.

import CoreLocation
import MapKit

class MapViewController: UIViewController, CLLocationManagerDelegate {
    let locationManager = CLLocationManager()
    @IBOutlet weak var mapView: MKMapView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.startUpdatingLocation()
        
        mapView.showsUserLocation = true
    }
    
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        guard let location = locations.last else { return }
        
        let region = MKCoordinateRegion(center: location.coordinate, latitudinalMeters: 1000, longitudinalMeters: 1000)
        mapView.setRegion(region, animated: true)
        
        // 위치 정보를 사용하여 지도에 핀 등을 추가하는 코드를 작성합니다.
        // ...
    }
}

위 코드에서는 위치 업데이트마다 didUpdateLocations 메서드가 호출되므로, 이 메서드 내에서 위치 기반 작업을 수행할 수 있습니다.

5. 사용자 권한 확인하기

위치 관리자를 사용하기 위해서는 사용자의 권한 동의를 받아야 합니다. iOS에서 위치 권한을 요청하는 방법에 따라 애플리케이션의 Info.plist 파일에 다음 키-값을 추가해주세요.

위치 권한이 필요한 시점에서 iOS는 해당 메시지를 사용자에게 표시합니다.

이제 Presentr와 함께 실시간 위치 추적 기능을 구현하는 방법을 알게 되었습니다. 이를 응용하여 개발하고자 하는 앱에 맞게 위치 정보를 활용해보세요!


참고 자료: