今回は、地図アプリを制作しながら、Plotocolも学習します。
import UIKit
//Mapのimportは2つ
import MapKit
import CoreLocation
class ViewController: UIViewController,CLLocationManagerDelegate,UIGestureRecognizerDelegate,SearchLocationDelegate {
var addressString = ""
@IBOutlet var longPress: UILongPressGestureRecognizer!
@IBOutlet weak var setteiButton: UIButton!
@IBOutlet weak var mapView: MKMapView!
var locManager:CLLocationManager!
@IBOutlet weak var addressLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func longPressTap(_ sender: UILongPressGestureRecognizer) {
if sender.state == .began {
}else if sender.state == .ended {
let tapPoint = sender.location(in: view)
let center = mapView.convert(tapPoint, toCoordinateFrom: mapView)
let lat = center.latitude
let log = center.longitude
convert(lat: lat, log: log)
}
}
func convert(lat: CLLocationDegrees, log: CLLocationDegrees) {
let geocoder = CLGeocoder()
let location = CLLocation(latitude: lat, longitude: log)
//クロージャー
//値が入った後に括弧内が呼ばれ、それまでは確固外が呼ばれる。
geocoder.reverseGeocodeLocation(location){(placeMark, err) in
//クロージャーの内はselfを付ける
if placeMark == placeMark {
if let pm = placeMark?.first {
if pm.administrativeArea != nil || pm.locality != nil {
self.addressString = pm.name! + pm.administrativeArea!
}else{
self.addressString = pm.name!
}
self.addressLabel.text = self.addressString
}
}
}
}
import UIKit
protocol SearchLocationDelegate {
func searchLocation(idoValue:String, keidoValue:String)
}
class NextViewController: UIViewController {
@IBOutlet weak var idoTextField: UITextField!
@IBOutlet weak var keidoTextField: UITextField!
var searchDelegate:SearchLocationDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func okAction(_ sender: Any) {
let idoValue = idoTextField.text!
let keidoValue = keidoTextField.text!
if idoTextField.text != nil && keidoTextField.text != nil {
searchDelegate?.searchLocation(idoValue: idoValue, keidoValue: keidoValue)
dismiss(animated: true, completion: nil)
}
}
//タッチでキーボードを閉じる
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
view.endEditing(true)
}
//returnキーで、閉じる
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}