MAP

来源:互联网 发布:四川理工学院知乎 编辑:程序博客网 时间:2024/06/09 17:08

//
// ViewController.m
// 地图锚点
//
// Created by 杜建军 on 2017/12/14.
// Copyright © 2017年 杜建军. All rights reserved.
//

import “ViewController.h”

import

import

pragma mark –手势回调

  • (void) longPress:(UILongPressGestureRecognizer*)gesture{
    //获取长按点的坐标
    CGPoint pos = [gesture locationInView:self.mapView];
    //将长按点的坐标转换为经度、维度值
    CLLocationCoordinate2D coord = [self.mapView convertPoint:pos
    toCoordinateFromView:self.mapView];
    // 将经度、维度值包装为CLLocation对象
    CLLocation* location = [[CLLocation alloc]initWithLatitude:coord.latitude
    longitude:coord.longitude];
    //根据经、纬度反向解析地址
    [_geocoder reverseGeocodeLocation:location completionHandler:
    ^(NSArray *placemarks,NSError *error)
    {
    if (placemarks.count >0 && error ==nil)
    {
    // 获取解析得到的第一个地址信息
    CLPlacemark* placemark = [placemarks objectAtIndex:0];
    // 获取地址信息中的FormattedAddressLines对应的详细地址
    NSArray* addrArray = placemark
    .addressDictionary[@”FormattedAddressLines”];
    // 将详细地址拼接成一个字符串
    NSMutableString* address = [[NSMutableString alloc]init];
    for(int i =0 ; i < addrArray.count ; i ++)
    {
    [address appendString:addrArray[i]];
    }

         // 创建MKPointAnnotation对象——代表一个锚点     MKPointAnnotation  *annotation = [[MKPointAnnotation alloc]init];     annotation.title = placemark.name;     annotation.subtitle = address;     annotation.coordinate = coord;     // 添加锚点     [self.mapView addAnnotation:annotation]; }

    }];
    }

pragma mark -点击回到输入的的经纬度位置

  • (IBAction)goClicked:(id)sender{
    //关闭两个文本框的虚拟键盘
    [self.latitudeField resignFirstResponder];
    [self.longitudeField resignFirstResponder];
    //纬度
    NSString* latitudeStr =self.latitudeField.text;
    //经度
    NSString* longtitudeStr =self.longitudeField.text;
    //如果用户输入的经度、纬度不为空
    if (latitudeStr !=nil && latitudeStr.length >0
    && longtitudeStr != nil && longtitudeStr.length >0)
    {
    // 调用自己实现的方法设置地图的显示位置和显示区域
    [self locateToLatitude:latitudeStr.floatValue
    longitude:longtitudeStr.floatValue];
    }
    }

pragma mark –自定义封装定位方法

  • (void)locateToLatitude:(CGFloat)latitude longitude:(CGFloat)longitude{
    //设置地图中心的经、纬度
    CLLocationCoordinate2D center = {latitude , longitude};
    //设置地图显示的范围,
    MKCoordinateSpan span;
    //地图显示范围越小,细节越清楚
    span.latitudeDelta =0.01;
    span.longitudeDelta =0.01;
    // 创建MKCoordinateRegion对象,该对象代表了地图的显示中心和显示范围。
    MKCoordinateRegion region = {center,span};
    //设置当前地图的显示中心和显示范围
    [self.mapView setRegion:region animated:YES];

    // 创建MKPointAnnotation对象——代表一个锚点
    MKPointAnnotation* annotation = [[MKPointAnnotation alloc]init];
    annotation.title =@”北京石羿科技发展有限公司”;
    annotation.subtitle =@”海淀区中关村软件园”;

    CLLocationCoordinate2D coordinate = {latitude , longitude};
    annotation.coordinate = coordinate;
    // 添加锚点
    [self.mapView addAnnotation:annotation];
    }

pragma mark -自定义锚点

// MKMapViewDelegate协议中的方法,该方法的返回值可用于定制锚点控件的外观
- (MKAnnotationView ) mapView:(MKMapView )mapView
viewForAnnotation:(id ) annotation{
static NSString* annoId =@”fkAnno”;

//获取可重用的锚点控件MKAnnotationView* annoView = [mapView                              dequeueReusableAnnotationViewWithIdentifier:annoId];//如果可重用的锚点控件不存在,创建新的可重用锚点控件if (!annoView){    annoView= [[MKAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:annoId];    /*     如果不想改变锚点控件的图片,只想改变颜色,则可创建MKPinAnnotationView实例     再修改MKPinAnnotationView对象的pinColor属性即可。     */}//为锚点控件设置图片annoView.image = [UIImage imageNamed:@"pos.gif"];//设置该锚点控件是否可显示气泡信息annoView.canShowCallout =YES;//定义一个按钮,用于为锚点控件设置附加控件UIButton *button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];//为按钮绑定事件处理方法[button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];// 可通过锚点控件的rightCalloutAccessoryView、leftCalloutAccessoryView设置附加控件annoView.rightCalloutAccessoryView = button;return annoView;

}

pragma mark -自定义锚点 –里面的详情按钮

  • (void) buttonTapped:(id)sender
    {
    NSLog(@”您点击了锚点信息!”);
    }

  • (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }

@end

原创粉丝点击