지난 글에 스위프트로 현재 위치 정보를 얻어서 다루는 방법에 대해 공부했습니다.
이번엔 현재 위치를 가지고 맵에 표시하는 방법을 공부해 보겠습니다.
오늘도 VEA Software의 강좌를 가지고 공부했습니다.
이것은 xcode 7 으로 작업했더라구요. 그래서 소스를 받아서 6.4 에서 돌리니까 에러가 났습니다.
그래서 7.1 beta를 설치해서 거기서 돌리니까 제대로 돌아가더라구요.
그런데 이전에 작업했던 걸 불러오니까 자기가 Convert 시켰는데도 실행이 안되네요.
애플의 개발 툴도 아주 안정적이지는 않은 것 같아요.
하여간 일단 소스코드를 보겠습니다.
import UIKit
import MapKit
import CoreLocation
class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate
{
@IBOutlet weak var mapView: MKMapView!
let locationManager = CLLocationManager()
override func viewDidLoad()
{
super.viewDidLoad()
self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager.requestWhenInUseAuthorization()
self.locationManager.startUpdatingLocation()
self.mapView.showsUserLocation = true
}
override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Location Delegate Methods
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
{
let location = locations.last
let center = CLLocationCoordinate2D(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude)
let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 1, longitudeDelta: 1))
self.mapView.setRegion(region, animated: true)
self.locationManager.stopUpdatingLocation()
}
func locationManager(manager: CLLocationManager, didFailWithError error: NSError)
{
print("Error: " + error.localizedDescription, terminator: "")
}
}
CoreLocation과 관련된 것은 이전 글에서 다뤘으니까 여기서 따로 다루지는 않겠고...
맵을 사용하려면 우선 MapKit 을 import 하고 CLLocationManagerDelegate를 클래스에 추가합니다.
그리고 화면에 맵을 표시해야 하니까 Main.storyBoard 를 사용해서 MapView를 스크린에 얹고 변수 mapView 를 선언합니다.
다음에 viewDidLoad 메소드에 CLLocationManager()를 사용해 구현한 4개의 라인 밑에 맵뷰의 showsUserLocation을 true로 세팅합니다.
이러면 사용자 위치를 보여줄 수 있도록 사전 준비가 다 된 겁니다.
다음은 CLLocationManagerDelegate의 didUpdateLocations 메소드를 구현합니다.
이 메소드 안을 보면 우선 가장 최근의 위치정보를 location 에 담구요
Core Location의 Data Type 중 하나인 CLLocationCoordinate2D를 사용합니다.
이 데이터 타입에는 CLLocationAccuracy, CLLocationDegrees, CLLocationDirection, CLLocationDistance 그리고 CLLocationSpeed 등이 있습니다.
CLLocationCoordinate2D는 위도와 경도 정보를 받는 겁니다.
이 위도 경도 정보를 center라는 변수에 담습니다.
다음은 MKCoordinateRegion 을 사용합니다. 이것은 MapKit의 데이터 타입중 하나입니다.
이외에 MKCoordinateSpan, MKMapPoint, MKMapSize, MKMapRect, MKZoomScale 등이 있습니다.
MKCoordinateRegion은 위도 경도에 해당하는 지역을 맵의 중앙에 위치하고 MKCoordinateSpan 은 지도의 scale을 정할 수 있습니다.
이렇게 region을 완료하면 그 다음에 이 region을 mapView 에 세팅을 하면 됩니다.
이때 animated는 true로 선언하구요.
그리고 나서 locationManager의 stopUpdatingLocation()을 호출해서 업데이트를 중지시킵니다.
이렇게 하면 지도에 현재의 위치를 표시하게 됩니다.
'iOS > swift' 카테고리의 다른 글
[Swift] Table View 만들기 (0) | 2015.10.15 |
---|---|
[Swift] Facebook 에 사진 올리는 앱 Selfie 만들기 (0) | 2015.09.21 |
[Swift] Social Network Service (Facebook, Twitter) (0) | 2015.09.19 |
[Swift] 카메라와 사진 다루기 (Camera and Photo) (0) | 2015.09.19 |
[Swift] 현재 위치 정보 다루기 (0) | 2015.09.14 |
Tutorial: How to use Auto Layout in Xcode 6 (0) | 2015.08.27 |
swift Memo (0) | 2015.08.26 |
swift 함수 사용 예제 (0) | 2015.08.25 |