位置与地图(二)地图的使用以及标注地图

来源:互联网 发布:传奇永恒数据网络异常 编辑:程序博客网 时间:2024/06/10 10:51

            继上一章,使用CoreLocation框架获取了当前设备的位置,这一章介绍地图的使用.

             首先,导入<MapKit.framework>框架

              #import <MapKit/MapKit.h>

@main代码示例

main.h#import <UIKit/UIKit.h>#import <MapKit/MapKit.h>//  引用地图协议@interface HMTMainViewController : UIViewController<MKMapViewDelegate>@endmain.m////  HMTMainViewController.m//  Map////  Created by HMT on 14-6-21.//  Copyright (c) 2014年 humingtao. All rights reserved.//#import "HMTMainViewController.h"#import "HMTAnnotation.h"@interface HMTMainViewController ()@property (nonatomic ,strong) MKMapView *mapView;@end@implementation HMTMainViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];    if (self) {        // Custom initialization    }    return self;}- (void)viewDidLoad{        [super viewDidLoad];    self.view.backgroundColor = [UIColor redColor];        // Do any additional setup after loading the view.        self.navigationItem.title = @"地图标注";    self.mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, 320, 568)];        //  是否显示用户当前位置    self.mapView.showsUserLocation = YES;    //  设置代理    self.mapView.delegate = self;        //  地图显示类型    /**     *      MKMapTypeStandard = 0, //  标准地图     *      MKMapTypeSatellite,    //  卫星地图     *      MKMapTypeHybrid        //  混合地图     */    self.mapView.mapType = MKMapTypeStandard;    //  经纬度    CLLocationCoordinate2D coord2D = {39.910650,116.47030};    //  显示范围,数值越大,范围就越大    MKCoordinateSpan span = {0.1,0.1};    //  显示区域    MKCoordinateRegion region = {coord2D,span};    //  给地图设置显示区域    [self.mapView setRegion:region animated:YES];    //  是否允许缩放    //self.mapView.zoomEnabled = NO;    //  是否允许滚动    //self.mapView.scrollEnabled = NO;    //  初始化自定义Annotation(可以设置多个)    HMTAnnotation *annotation = [[HMTAnnotation alloc] initWithCGLocation:coord2D];    //  设置标题    annotation.title = @"自定义标注位置";    //  设置子标题    annotation.subtitle = @"子标题";    //  将标注添加到地图上(执行这步,就会执行下面的代理方法viewForAnnotation)    [self.mapView addAnnotation:annotation];        [self.view addSubview:_mapView];    }//   返回标注视图(大头针视图)- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{    /**     *  是不是有点像自定义UITableViewCell一样     */    static NSString *identifier = @"annotation";    //  复用标注视图(MKPinAnnotationView是大头针视图,继承自MKAnnotation)    MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];    if (annotationView == nil) {        annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];    }    //  判断是否为自定义的标注视图    if ([annotation isKindOfClass:[HMTAnnotation class]]) {                //  设置大头针圆圈颜色        annotationView.pinColor = MKPinAnnotationColorGreen;        //  点击头针红色圆圈是否显示上面设置好的标题视图        annotationView.canShowCallout = YES;        //  要自定义锚点图片,可考虑使用MKAnnotationView;MKPinAnnotationView只能是以大头针形式显示!!!!        annotationView.image = [UIImage imageNamed:@"customImage"];        //  添加标题视图右边视图(还有左边视图,具体可自行查看API)        UIButton *button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];        [button addTarget:self action:@selector(didClickAnnotationViewRightButtonAction:) forControlEvents:UIControlEventTouchUpInside];        annotationView.rightCalloutAccessoryView = button;        //  是否以动画形式显示标注(从天而降)        annotationView.animatesDrop = YES;        annotationView.annotation = annotation;                //  返回自定义的标注视图        return annotationView;            }else{               //  当前设备位置的标注视图,返回nil,当前位置会创建一个默认的标注视图        return nil;    }    }- (void)didClickAnnotationViewRightButtonAction:(UIButton *)button{    NSLog(@"%d %s",__LINE__,__FUNCTION__);}//  更新当前位置调用- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{    NSLog(@"%d %s",__LINE__,__FUNCTION__);}//  选中标注视图- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view{        NSLog(@"%d %s",__LINE__,__FUNCTION__);}//  地图的现实区域改变了调用- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{    NSLog(@"%d %s",__LINE__,__FUNCTION__);}- (void)didReceiveMemoryWarning{    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}@end

@自定义MKAnnotationView

#import <Foundation/Foundation.h>#import <MapKit/MapKit.h>//  引入MKAnnotation协议,切记不能忘记!!!!!!!!!@interface HMTAnnotation : NSObject<MKAnnotation>@property (nonatomic,readonly) CLLocationCoordinate2D coordinate;  //  坐标@property (nonatomic,copy) NSString *title;     //  位置名称@property (nonatomic,copy) NSString *subtitle;  //  位置子信息(可选)- (id)initWithCGLocation:(CLLocationCoordinate2D) coordinate;@end#import "HMTAnnotation.h"@implementation HMTAnnotation- (id)initWithCGLocation:(CLLocationCoordinate2D)coordinate{    if (self = [super init]) {                _coordinate = coordinate;    }    return self;}@end

@效果图:



11 0
原创粉丝点击