iOS地图MKMapView详析
来源:互联网 发布:高考软件理科 编辑:程序博客网 时间:2024/05/22 14:30
目前几乎所有服务行业的产品都考虑到加入地图的功能,这大大提升了软件的易用和直观性。在iphone 中运用地图并不是一件困难的事情,因为SDK中已经提供了地图控件。
下边是我总结iphone地图的用法。
1。
现在.h文件中添加地图头文件
#import<MapKit/MapKit.h>
2。
在.h文件中添加地图委托<MKMapViewDelegate>
3。
在.h文件中声明地图成员变量以及用到的函数
//地图变量
MKMapView *mapView;
//地图自动缩放。用于在设置过MapAnnotation地标后,执行次函数,就会自动的缩放地图到合适的大小。
- (void)zoomToFitMapAnnotations:(MKMapView*)inMapView;
4。
在.m的init函数中创建地图控件
//map
mapView = [[MKMapViewalloc] initWithFrame:CGRectMake(0,44, 320, self.view.frame.size.height - 88)];
[mapViewsetMapType: MKMapTypeStandard];
//设定经纬度
CLLocationCoordinate2DtheCoordinate;
theCoordinate.latitude=24.148926;
theCoordinate.longitude=120.715542;
//设定显示范围
MKCoordinateSpan theSpan;
theSpan.latitudeDelta=0.1;
theSpan.longitudeDelta=0.1;
//设置地图显示的中心及范围
MKCoordinateRegiontheRegion;
theRegion.center=theCoordinate;
theRegion.span=theSpan;
//设置地图显示的类型及根据范围进行显示
[mapViewsetMapType:MKMapTypeStandard];
[mapViewsetRegion:theRegion];
mapView.delegate=self;
[self.viewaddSubview:mapView];
5。
在dealloc函数中释放
[mapViewrelease];
。
移除所有地标
[mapViewremoveAnnotations: [mapViewannotations]];
。
#pragma mark -
#pragma mark地图委托
- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id<MKAnnotation>)iAnnotation{
DebugLog(@"viewForAnnotation");
if ([iAnnotationisKindOfClass:[MKUserLocationclass]])
return nil;
if ([iAnnotation isKindOfClass:[MapAnnotationclass]]) // for Golden Gate Bridge
{
MapAnnotation *annotation = iAnnotation;
staticNSString *AnnotationIdentifier = @"AnnotationIdentifier";
staticNSString *UserIdentifier = @"UserIdentifier";
NSString *Identifier =nil;
if (annotation.tag == -1) {
Identifier = AnnotationIdentifier;
}else {
Identifier = UserIdentifier;
}
MKAnnotationView* pinView = (MKAnnotationView *) [mapViewdequeueReusableAnnotationViewWithIdentifier:Identifier];
//如果不存在的情况就创建
if (!pinView)
{
if ([IdentifierisEqualToString:AnnotationIdentifier]) {
//自定义的大头针样式,这样的好处是,点击此按钮,会弹出一个提示框,并且提升框可以响应点击。
pinView = [[[MKPinAnnotationViewalloc] initWithAnnotation:iAnnotationreuseIdentifier:Identifier]autorelease];
[(MKPinAnnotationView *)pinViewsetPinColor:MKPinAnnotationColorRed];
UIButton *button = [UIButtonbuttonWithType:UIButtonTypeDetailDisclosure];
[buttonaddTarget:selfaction:@selector(curPositionButtonPressed:)forControlEvents:UIControlEventTouchUpInside];
[pinViewsetImage:[UIImageimageNamed:@"datouzhen.png"]];
pinView.rightCalloutAccessoryView = button;
/*
//默认的红色大头针,点击只能显示提示框,但不能点击此按钮。
pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:iAnnotation reuseIdentifier:Identifier] autorelease];
[(MKPinAnnotationView *)pinView setPinColor:MKPinAnnotationColorRed];
*/
}else {
pinView = [[[MKAnnotationViewalloc] initWithAnnotation:iAnnotationreuseIdentifier:Identifier]autorelease];
UIButton *button = [UIButtonbuttonWithType:UIButtonTypeDetailDisclosure];
button.tag =annotation.tag;
[buttonaddTarget:selfaction:@selector(annotationButtonPressed:)forControlEvents:UIControlEventTouchUpInside];
[pinViewsetImage:[UIImageimageNamed:@"ann.png"]];
pinView.rightCalloutAccessoryView = button;
}
pinView.canShowCallout =YES;
return pinView;
}
//如果这个已经存在,就需要重新给pinView.annotation设置值。
else
{
pinView.annotation = iAnnotation;
}
return pinView;
}
returnnil;
}
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)viewcalloutAccessoryControlTapped:(UIControl *)control {
}
//选中了红色大头针,会显示提示按钮。点击按钮执行的函数。
- (void)curPositionButtonPressed:(UIButton *)inButton {
//inButton.tag
}
//单击某一个annotation标签的时候,会显示一个提示,提示框上有一个右箭头按钮。点击此按钮的时候,执行此函数。
- (void)annotationButtonPressed:(UIButton *)inButton {
//inButton.tag
}
//插入图钉。并设置图钉的名称和位置
-(void) setPointAnnotation{
[mapViewremoveAnnotations: [mapViewannotations]];
CLLocationCoordinate2D coordinate = {_position.latitude,_position.longitude};
MapAnnotation *annotation = [[[MapAnnotationalloc] initWithCoordinate:coordinate]autorelease];
annotation.tag = -1;
annotation.title = @"提示信息";
[mapViewaddAnnotation:annotation];
[mapViewselectAnnotation:annotationanimated:YES];
}
玩过google app的都知道,我们在地图上加一个目的地的时候,annotationview是从上掉下来的,如何实现这样的效果?经过实战,我找到有两种方法可以完成这样的效果。
第一种是实现MKMapViewDelegate的一个方法,然后自已实现下落的动画效果,代码如下:
- - (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
- MKAnnotationView *aV;
- for (aV in views) {
- CGRect endFrame = aV.frame;
- aV.frame = CGRectMake(aV.frame.origin.x, aV.frame.origin.y - 230.0, aV.frame.size.width, aV.frame.size.height);
- [UIView beginAnimations:nil context:NULL];
- [UIView setAnimationDuration:0.45];
- [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
- [aV setFrame:endFrame];
- [UIView commitAnimations];
- }
- }
- - (MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation
- {
- if (annotation == mV.userLocation) {
- return nil;
- }
- MKPinAnnotationView *pinView = nil;
- static NSString *defaultPinID = @"custom pin";
- pinView = (MKPinAnnotationView *)[mV dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
- if ( pinView == nil )
- {
- pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease];
- [pinView setDraggable:YES];
- }
- pinView.pinColor = MKPinAnnotationColorRed;
- pinView.canShowCallout = YES;
- pinView.animatesDrop = YES;
- return pinView;
- }
注意,就是
- pinView.animatesDrop = YES;
-(void)viewDidLoad{
NSMutableArray *overlays = [[NSMutableArray alloc] init]
CLLocationCoordinate2D coords;
coords.latitude = 37.331799;
coords.longitude = -122.030841;
CLLocationCoordinate2D pointsToUse[3];
pointsToUse[0] = coords;
coords.latitude = 37.335799;
coords.longitude = -122.032841;
pointsToUse[1] = coords;
coords.latitude = 37.336799;
coords.longitude = -122.034841;
pointsToUse[2] = coords;
MKPolyline *lineOne = [MKPolyline polylineWithCoordinates:pointsToUse count:3];
lineOne.title = @"red";
[overlays addObject:lineOne];
[googleMapView addOverlays:overlays];
[lineOne release];
}
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
if ([overlay isKindOfClass:[MKPolyline class]]) {
MKPolyline *polyline = overlay;
MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:overlay];
polylineView.strokeColor = [UIColor colorWithRed:0.2 green:0.2 blue:0.2 alpha:0.8];
polylineView.lineWidth = 2.5;
return polylineView;
// }
}
- iOS地图MKMapView详析
- IOS MKMapView 地图视图
- iOS MKMapView嵌入地图
- IOS MKMapView 地图视图
- iOS 地图 api MKMapView
- iOS MKMapView 地图视图
- ios-MKMapView苹果地图开发
- IOS中的地图视图MKMapView
- iOS 苹果地图 MKMapView总结
- ios利用MKMapView实现简单的地图
- ios利用MKMapView实现简单的地图
- iOS开发 地图MKMapView小Demo
- iOS开发 地图:MKMapView控件的使用
- MKMapView iOS的地图详细应用
- iOS MKMapView
- iOS-MKMapView
- ios利用MKMapView显示自己当前位置的地图
- IOS 地图定位,标记位置,获取经纬度,MKMapView的使用
- java中HashMap详解
- 实战数据结构(9)_单链表实现多项式的相乘
- IE8 访问https安全证书错误;导航阻止 解决办法
- oracle:变长数组varray,嵌套表,集合
- Redis运行流程源码解析
- iOS地图MKMapView详析
- 批处理 删除文件 脚本
- SQL 批量插入
- Java学习笔记之 类与对象2
- php简体转繁体
- LOG4J配置详解
- spring 依赖注入
- 对C++继承,封装,多态的理解
- Android APN配置