Запускаем XCode и Создаем приложение:
Выбираем Single View Application.
Language: Swift
Devices: IPhone
Добавляем зависимости:
Для этого щелкаем по знаку + в разделе Link Binary With Libraries.
Добавляем 2 фреймворка:
CoreLocation
И MapKit
Выбираем в Project Navigator (Левое меню) Main.storyboard :
Добавляем из Object Library MapKitView:
Добавляем Delegate k ViewController правым щелчком по MapKitView вызвав меню:
Для того что бы ОС разрешила нам определять текущее местоположение устройства необходимо запросить у пользователя разрешение. В Project Manager выбираем Supporting Files -> Info.pllist
Открываем как Source Code:
Добавляем строки:
<key>NSLocationWhenInUseUsageDescription</key>
<string>App need to know(when it starts) your location</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>App tracking your location to calculate your activity time</string>
Естественно, что для настоящего приложения необходимы более убедительные объяснения.
Переходим во ViewController.swift и импортируем фреймворки:
import MapKit
import CoreLocation
Добавляем интерфейсы делегатов MKMapViewDelegate, CLLocationManagerDelegate к классу:
class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
Добавляем outlet MKMapView с именем map:
@IBOutlet weak var map: MKMapView!
Исходный текст с комментариями
import UIKit
import MapKit
import CoreLocation
class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
@IBOutlet weak var label: UILabel!
@IBOutlet weak var map: MKMapView!
var manager = CLLocationManager() // CoreLocation manager
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
initializeManager() // CoreLocation manager initializations
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func initializeManager() {
manager.delegate = self // Устанавливаем delegate
manager.desiredAccuracy = kCLLocationAccuracyBest //Устанавливаем точность
manager.requestWhenInUseAuthorization() // Запрашиваем разрешение на получение данных о местонахождении (1 раз)
manager.startUpdatingLocation() // Начинаем получать данные о текущем положении
}
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { //callback вызываемый после получения данных о местоположении
// println("locations : \(locations)") // отладка
var currentLocation:CLLocation = locations[0] as! CLLocation // Получаем самые свежие данные о текущем положении
var latitude = currentLocation.coordinate.latitude // широта
var longitude = currentLocation.coordinate.longitude // долгота
let speed = currentLocation.speed
let altitude = currentLocation.altitude
let accuracy = currentLocation.horizontalAccuracy
var dict = ["latitude": latitude, "longitude": longitude]
label.text = "latitude \(latitude), longitude \(longitude), altitude \(altitude), speed \(speed), accuracy \(accuracy)"
setRegion(setLocation(dict)) //устанавливаем текущее местоположение на карте
}
func setLocation(dict: Dictionary<String, CLLocationDegrees>) -> CLLocationCoordinate2D{ // helper для получения location:CLLocationCoordinate2D
var latitude:CLLocationDegrees = dict["latitude"]! // получаем широту из словаря - параметр функции
var longitude:CLLocationDegrees = dict["longitude"]! // получаем долготу из словаря - параметр функции
var location:CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude)
return location
}
func setRegion(location: CLLocationCoordinate2D) { // helper для установки текущего местоположения на карте
var latDelta:CLLocationDegrees = 0.01 // точность при определении широты
var lonDelta:CLLocationDegrees = 0.01 // точность при определении долготы
var span:MKCoordinateSpan = MKCoordinateSpan(latitudeDelta: latDelta, longitudeDelta: lonDelta) // точность
var region:MKCoordinateRegion = MKCoordinateRegionMake(location, span) // текущее местоположение
map.setRegion(region, animated: true) // установка текущего местоположения на карте
}
}
Выбираем Single View Application.
Language: Swift
Devices: IPhone
Добавляем зависимости:
Для этого щелкаем по знаку + в разделе Link Binary With Libraries.
Добавляем 2 фреймворка:
CoreLocation
И MapKit
Выбираем в Project Navigator (Левое меню) Main.storyboard :
Добавляем из Object Library MapKitView:
Добавляем Delegate k ViewController правым щелчком по MapKitView вызвав меню:
Для того что бы ОС разрешила нам определять текущее местоположение устройства необходимо запросить у пользователя разрешение. В Project Manager выбираем Supporting Files -> Info.pllist
Открываем как Source Code:
Добавляем строки:
<key>NSLocationWhenInUseUsageDescription</key>
<string>App need to know(when it starts) your location</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>App tracking your location to calculate your activity time</string>
Естественно, что для настоящего приложения необходимы более убедительные объяснения.
Переходим во ViewController.swift и импортируем фреймворки:
import MapKit
import CoreLocation
Добавляем интерфейсы делегатов MKMapViewDelegate, CLLocationManagerDelegate к классу:
class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
Добавляем outlet MKMapView с именем map:
@IBOutlet weak var map: MKMapView!
Исходный текст с комментариями
import UIKit
import MapKit
import CoreLocation
class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
@IBOutlet weak var label: UILabel!
@IBOutlet weak var map: MKMapView!
var manager = CLLocationManager() // CoreLocation manager
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
initializeManager() // CoreLocation manager initializations
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func initializeManager() {
manager.delegate = self // Устанавливаем delegate
manager.desiredAccuracy = kCLLocationAccuracyBest //Устанавливаем точность
manager.requestWhenInUseAuthorization() // Запрашиваем разрешение на получение данных о местонахождении (1 раз)
manager.startUpdatingLocation() // Начинаем получать данные о текущем положении
}
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { //callback вызываемый после получения данных о местоположении
// println("locations : \(locations)") // отладка
var currentLocation:CLLocation = locations[0] as! CLLocation // Получаем самые свежие данные о текущем положении
var latitude = currentLocation.coordinate.latitude // широта
var longitude = currentLocation.coordinate.longitude // долгота
let speed = currentLocation.speed
let altitude = currentLocation.altitude
let accuracy = currentLocation.horizontalAccuracy
var dict = ["latitude": latitude, "longitude": longitude]
label.text = "latitude \(latitude), longitude \(longitude), altitude \(altitude), speed \(speed), accuracy \(accuracy)"
setRegion(setLocation(dict)) //устанавливаем текущее местоположение на карте
}
func setLocation(dict: Dictionary<String, CLLocationDegrees>) -> CLLocationCoordinate2D{ // helper для получения location:CLLocationCoordinate2D
var latitude:CLLocationDegrees = dict["latitude"]! // получаем широту из словаря - параметр функции
var longitude:CLLocationDegrees = dict["longitude"]! // получаем долготу из словаря - параметр функции
var location:CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude)
return location
}
func setRegion(location: CLLocationCoordinate2D) { // helper для установки текущего местоположения на карте
var latDelta:CLLocationDegrees = 0.01 // точность при определении широты
var lonDelta:CLLocationDegrees = 0.01 // точность при определении долготы
var span:MKCoordinateSpan = MKCoordinateSpan(latitudeDelta: latDelta, longitudeDelta: lonDelta) // точность
var region:MKCoordinateRegion = MKCoordinateRegionMake(location, span) // текущее местоположение
map.setRegion(region, animated: true) // установка текущего местоположения на карте
}
}










Комментариев нет:
Отправить комментарий