今回は、地図アプリを制作しながら、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

    }

}