码迷,mamicode.com
首页 > 其他好文 > 详细

地图框架

时间:2015-04-05 12:03:02      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:ios   ios开发   mkmapview   objective-c   

使用苹果自带的地图框架,需要在项目中加载MapKit.framework(项目—TARGETS--Build Phases--Link Binary With Libraries),并在头文件中导入#import<MapKit/MapKit.h>

一、MKMapView的常用属性和方法
NSArray *annotations;//保存地图中的大头针
MKCoordinateRegionregion; //显示区域
MKCoordinateRegion是个结构体,包括两个属性
typedefstruct {
CLLocationCoordinate2D center;
MKCoordinateSpan span;
} MKCoordinateRegion;

CLLocationCoordinate2D//显示经纬度
MKCoordinateSpan//显示精度

//设置显示位置,显示在屏幕中心点
    CLLocationCoordinate2D coord;
    coord.longitude = 113.346196; //经度
    coord.latitude = 23.140563;//纬度
//地图的显示精度,数值越小地图显示越详细
    MKCoordinateSpan span;
    span.longitudeDelta = 0.1;
    span.latitudeDelta = 0.1;
//设置显示区域
    [self.mapViewsetRegion:(MKCoordinateRegionMake(coord, span))];

//点击屏幕上的位置,获取经纬度
- (
IBAction)tapAction:(UITapGestureRecognizer*)sender {
   
CGPoint p = [senderlocationInView:self.view];
   
//将屏幕上的点转换为地图坐标
   
CLLocationCoordinate2D coord = [self.mapViewconvertPoint:ptoCoordinateFromView:self.view];
   
NSLog(@"coord.longitude:%lf coord.latitude:%lf", coord.longitude,coord.latitude);
}

二、在地图上设置大头针
在地图上显示大头针,苹果是通过遵守一个MapKit框架中MKAnnotation协议来实现的。
1、创建一个继承自NSObject的子类
2、在子类中导入 #import <MapKit/MapKit.h>
3、让子类遵守 MKAnnotation协议,实现协议中的属性和方法 
//必须实现
@property(nonatomic,readonly)CLLocationCoordinate2Dcoordinate;

//选择实现
// Title and subtitle for use by selection UI.
@property(nonatomic,copy)NSString*title;
@property(nonatomic,copy)NSString*subtitle;

// Called as a result of dragging an annotation view.
- (void)setCoordinate:(CLLocationCoordinate2D)newCoordinate;

4、在地图中添加大头针
//创建一个大头针
XYZAnnotation*ann = [[XYZAnnotationalloc]init];
//设置经纬度等属性
[annsetCoordinate:coord];
ann.title= @"华师地铁站";
ann.subtitle= @"这里是华师地铁站";
//往地图上添加一个大头针
[self.mapViewaddAnnotation:ann];
//获取地图中的大头针
NSArray*anns = [self.mapViewannotations];
//移除地图中所有的大头针
[self.mapViewremoveAnnotations:anns];

5、自定义大头针视图
  • 创建一个继承自MKAnnotationView的自定义大头针视图
@interface XYZAnnotationView :MKAnnotationView

@end

#import"XYZAnnotationView.h"
@implementation XYZAnnotationView

- (id)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithAnnotation:annotationreuseIdentifier:reuseIdentifier];
    if (self) {
       UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(-15, -30,30,30)]; //点击屏幕放置大头针,设置大头针的frame.origin修正偏移
        imageView.image = [UIImageimageNamed:@"pink.png"];
        [self addSubview:imageView];
    }
    return self;
}
@end

  • 当前视图控制器遵守 MKMapViewDelegate协议;
  • 设置mapView的委托对象为当前视图控制器(self.mapView.delegate= self或者在Storyboard中拖拽);
  • 实现协议方法 
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
    static NSString *annotationViewId = @"annotationView";
   
    //从队列中获取一个annotationView
    XYZAnnotationView *annotationView = (XYZAnnotationView *)[self.mapViewdequeueReusableAnnotationViewWithIdentifier:annotationViewId];
   
    //如果队列中没有,则创建一个新的annotationView
    if (!annotationView) {
        annotationView = [[XYZAnnotationViewalloc]initWithAnnotation:annotationreuseIdentifier:annotationViewId];
    }
   
    return annotationView;
}



地图框架

标签:ios   ios开发   mkmapview   objective-c   

原文地址:http://blog.csdn.net/debolee/article/details/44886209

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!