最近想搞搞Swift和OC的混编所以先从基础开始研究,大神如果有更好的意见请指教!
之所以写这个是因为里面有闭包表达式,虽然离散数学中曾讲到闭包,但是还是感觉陌生,所以在使用MapView的时候,对于闭包的使用很尴尬,一知半解,在这里简单谈谈自己的见解,有错误的地方希望大神指正!!!
//基础地图
// self.baseMapView()
//自定义地理视图的地理坐标,为MKMapView指定地理坐标
// self.myMapView()
//显示地点提示框
self.annotationMapView()
//显示地理位置的名称,地理反编码
self.geocoderMap()
let device = UIDevice()
print("divice的信息--%@--%@--%@--%@--%@",device.name,device.systemName,device.systemVersion,device.model,device.localizedModel)
func geocoderMap() {
//初始化一个地理位置解析类,使用该类进行地理位置的反向解析
let geocoder = CLGeocoder()
//通过设定经纬度来创建一个位置
let location = CLLocation(latitude:39.9,longitude:116.5)
//使用地理位置解析对象,解析地理坐标
// 类型别名就是给一个类型定义的一个小名。通过 typealias 关键字进行定义。
// public typealias CLGeocodeCompletionHandler = ([CLPlacemark]?, Error?) -> Swift.Void
// reverse geocode requests
// open func reverseGeocodeLocation(_ location: CLLocation, completionHandler: @escaping CoreLocation.CLGeocodeCompletionHandler)
//@escaping 叫做逃逸闭包 具体详见http://wiki.jikexueyuan.com/project/swift/chapter2/07_Closures.html#closure_expressions
geocoder.reverseGeocodeLocation(location) { (placeMarks:[CLPlacemark]?, error:Error?) in
//在闭包语句里,处理解析后的结果,当结果中的位置坐标数组,长度大于0时,执行下来的操作
if(placeMarks?.count)! > 0{
//获得位置标记数组的第一个元素
let placeMark = placeMarks?.first
print(placeMark?.addressDictionary ?? AnyObject.self)
}
}
}
func annotationMapView() {
let map = MKMapView(frame:self.view.bounds)
map.showsUserLocation = true
map.mapType = MKMapType.standard
let coordinate2D = CLLocationCoordinate2D(latitude:39.915352,longitude:116.397105)
let zoomLevel = 0.02//设置地图显示区域的缩放级别
//初始化一个变量表示地图对象的显示区域
let regin = MKCoordinateRegionMake(coordinate2D,MKCoordinateSpanMake(zoomLevel, zoomLevel))
//设置对象的显示区域
map.setRegion(regin, animated: true)
self.view.addSubview(map)
let objectAnnotation = MKPointAnnotation()
//设置注释对象的地理位置
objectAnnotation.coordinate = coordinate2D;
//设置注释对象的标题
objectAnnotation.title = "Imperial Palace"
//设置注释对象的子标题
objectAnnotation.subtitle = "China's biggest palace"
//注释对象添加到地图中
map.addAnnotation(objectAnnotation)
}
func myMapView() {
let map = MKMapView(frame:self.view.bounds)
map.showsUserLocation = true
map.mapType = MKMapType.satellite
let coordinate = CLLocationCoordinate2D(latitude:39.915352,longitude:116.397105)
let zoomLevel = 0.02//设置地图显示区域的缩放级别
//初始化一个变量表示地图对象的显示区域
let regin = MKCoordinateRegionMake(coordinate,MKCoordinateSpanMake(zoomLevel, zoomLevel))
//设置对象的显示区域
map.setRegion(regin, animated: true)
self.view.addSubview(map)
}
func baseMapView() {
let map = MKMapView(frame:self.view.bounds)
map.showsUserLocation = true
map.mapType = MKMapType.standard
self.view.addSubview(map)
}