iphone地图应用的简易制作

1、新建工程,比如mapEye,点击工程里后缀名为xib(storeBoard一样),进入
操作界面,把在IB library中的Data View里的MapView拉到界面(MapView要在libraries section
里扩展)
2、为了让地图功能更强大,可以通过设置控件的Mapview的delegate,然后利用mapViewDidFinishLoadingMap:方法
来实现.
(1)首先在mapEyeViewController.h里声明class为MKMapViewDelegate.代码如下:

1 #import<UIKit/UIKit.h>
2 #iimport<MapKit/MapKit.h>
3 @interface mapEyeViewController.h:UIViewController
4 <MKMapViewDelegate>{}
5 @end

(2) 地图停止加载后调用MapView委托方法

 1 -(void)mapViewDidFinishLoadingMap:(MKMapView *)mapView{
 2 //重复检查用户的位置
 3 if(0.00001>[mapView userLocation].location.coordinate.latitude){
 4 [self performSelector:@selector(mapViewDidFinishLoadingMap:) withObject:mapView afterDelay:1.0];
 5 return;
 6 }
 7 MKCoordinateReginon region=[mapView region];
 8 //以用户所在地为中心
 9 region.center=[mapView userLocation].location.coordinate;
10 //缩小区域
11 region.span.latitudeDelta=0.02;
12 region.span.longitudeDelta=0.02;
13 //添加动画
14 [mapView setRegion:region animated:YES];
15 }

在UI 编辑器里,选择Map View,然后查看它的连线。给File’s Owner 的对象设置
delegate,即mapEyeViewController 实例。
通过CoreLocation查找用户位置
在没有Mapview的情况下需要得到用户位置 的经纬度
可以先创建一个CLLocationManager instance,设置其为delegate,调用startUpdatingLocation,
这个设为delegate的class还需要接入一个CLLoactionManagerDelegate协议

(1)开始并处理 CoreLacation更新

 1 -(void)startUpdates{
 2 if(nil==locationManager)
 3 locationManager=[[CLLocationmanager alloc] init];
 4 locationManager.delegate=self;
 5 locationManager.desriedAccuracy=kCLLocationAccuracyKilom eter;
 6 //设置精度
 7 locationManager.distanceFilter=10;
 8 //更新阙值
 9 [locationManager startUpdatingLocation]
10 }
11 -(void)locationManager:(CLLocationManager *)manager
12 didUpdateToLcocation:(CLLocation *)newLocation
13 fromLocation:(CLLocation *)oldLocation
14 {
15 NSDate *eventDate=new Location timestamp;
16 NSTimeInterval howRecent=[eventDate timeIntervalSinceNow];
17 if(abs(howRecent)<120.0){
18 [manager stopUpdatingLocation];
19 theLocation=new Location;
20 [theLocation retain];
21 根据对精确性和过滤器的设置,你可以控制更新的次数。同时,根据需要,也可以通过
22 stopUpdatingLocation.来停止位置的更新。
23 }
24 }

(3)添加锚点显示用户位置
这个锚点作为界面元素,自然是在mapEyeViewController里进行实行;按钮名字
为parkBtn,将锚点的IBAction添加到头文件里。将mapview作为outlet
下面是mapEyeViewController和park按钮 的IBAction的声明:

1 @interface mapEyeViewController:UIViewController
2 〈MKMapViewDelegate〉{
3 IBOutlet MKMapView *mapParking
4 }
5 -(IBAction)doParkBtn:(id)sender;
6 @end

在库里拉出ToolBar,并把上面Item按钮改成新名字:park,如图:

在File’s Owner 的关联(connection)里,关联mapParking outlet 到mapview。

双击在toolbar 上默认的Item 按钮,输入一个新名字:Park。在连线窗口,设置Park 按钮
的选择器(selector)为你刚刚在mapEyeParkedViewController 里定义过的IBAction
(命名为doParkBtn),返个park 按钮的选择器是在Interface Builder 里的File’s Owner。
接入doParkBtn,设置用户的位置为用户的停车地点。现在让我们来看看怎么做。
地图上的位置标注叫做annotations。iOS 的SDK 提供了一个MKAnnotation 的原型,
但返个原型丌是默认就接入了的。你必须要创建一个annotation class,返非常简单。你可
以在WhereAmIParkedViewController 文件中添加,如以下代码所示:
MKAnnotation头文件的地点实现

 1 @interface SpotAnnotation:NSObject<MKAnnotation>
 2 {
 3 CLLocationCoordinate2D coordinate;
 4 NSString *title;
 5 NSString *subtitle;
 6
 7 }
 8 @property(nonatomic,assign)CLLocationCoordinate2D coordinate;
 9 @property(nonatomic,retain)NSString *title;
10 @property(nonatomic,retain)NSString *subtitle;
11 @end;

地点的实现文件

1 @implementation SportAnnotation 2 @synthesize title,subtitle,coordinate; 3 @end

将锚点添加到mapview上

1 -(IBAction)doParkBtn(id)sender{
2 SpotAnnotation *ann=[[SpotAnnotation alloc] init];
3 [ann setCoordinate:[mapParking userLocation] location coordinate];
4 [mapParking addAnnotation:ann];
5 }

设置annotation view,让它在视图上显示

 1 -(MKAnnotation *)mapView:(MKMapView *)mapView
 2 viewForAnnotation:(id<MKAnnotation>)annotation{
 3 if(![annotation isKindOfClass:[SpotAnnotation class]])
 4 return nil;
 5 NSString *dqret=@"ParkingAnnon";
 6 id av=[mapView dequeueReusableAnnotationViewWithIdentifier:dqref];
 7 if(nil==av ){
 8 av=[[MKPinAnnotationView alloc] initWithAnnotation:annotation]
 9 reuseIdentifier:dqref];
10 [av setPinColor:MKPinAnnotationColorRed];
11 [av setAnimatesDrop:YES];
12 }
13 return av;
14 }

这样雏形算是出来了。

iphone地图应用的简易制作

时间: 2024-10-29 19:10:40

iphone地图应用的简易制作的相关文章

【百度地图API】如何制作泡泡放大镜?

原文:[百度地图API]如何制作泡泡放大镜? 任务描述: 我不喜欢API提供的缩放控件耶…… 我能不能使用其他方式放大地图勒? 当然阔以啦! 现在就来教大家如何动手制作一个可爱的泡泡放大镜! 使用它,就可以放大地图上的任何细节啦~ 如何实现: 创建主地图map1,在主地图上创建一个标注,并对标注添加一个信息窗口. 在信息窗口里面,创建一张小地图,地图级别为18(足够大啦). 默认设置信息窗口关闭,点击红色标注后打开信息窗口. 操作试试: 点击红色标注,立马弹出来一个泡泡放大镜! 你还可以移动主地

【百度地图API】如何制作一张魔兽地图!!——CS地图也可以,哈哈哈

原文:[百度地图API]如何制作一张魔兽地图!!--CS地图也可以,哈哈哈 摘要: 你玩魔兽不?你知道如何做一张魔兽地图不?! 快来看此文吧! --------------------------------------------- 一.制作魔兽地图的准备工作 其实,你只需要准备一些地图的瓦片图,就可以了. 用切片工具,把一张完整的图片(最好大一些,清楚一些),切成小片.(下周我贴这个工具的下载链接出来.留个悬念,哈哈.) 正式公布切图工具链接: http://openapi.baidu.co

【百度地图API】如何制作孪生姐妹地图?

原文:[百度地图API]如何制作孪生姐妹地图? 任务描述: 我想要两张一模一样的地图!我想要双子地图!我想要孪生姐妹地图! 好好好,统统满足大家! 在这里我不需要使用百度地图API提供的地图缩略图控件,而是自己动手做一对双胞胎地图! 如何实现? 创建两张地图,map1和map2,他俩的中心点和地图级别(放大倍数)不同. 当鼠标移动map1的中心点时,map2的中心点会随着一起变化,最终和map1的中心点一致. 同理,可以实现用鼠标滚轮放大缩小地图. 操作试试: 移动左边的地图,右边的地图会随着一

【高德地图API】如何制作自己的旅游地图?

原文:[高德地图API]如何制作自己的旅游地图? “旅行的梦想并不遥远,只要一颗流浪四方的心.”——唐人立. 最早认识唐人立的时候,他还是大二的学生.他独自完成了“南京20年规划地图”.几年前,他完成了自己的第一本著作,逃学去旅行<一个人走世界——大学4年200城的旅行>.而现在,他正执行着他的“辞职去旅行”计划.他好心的老板还多给他发了一个月的工资.从南京,到台湾,从曼谷到斯里兰卡……2个月来,唐人立走过太多地方.是他原创的图片和文字,让我渐渐对自助游产生了兴趣,并决定记录下旅游的每一刻.

[第1章]地图:iOS简易导航

一.类介绍 MKDirections 官方文档: 解析: 1.从Apple服务得到导航服务,执行导航需要一个请求类--MKDirectionRequest(下面介绍): 2.每个实例只处理一次导航请求,如果处理多个请求,要创建多个实例: 3.不要在短时间内,请求过多次,否则触发MKErrorLoadingThrottled. // request must not be nil. init(request request: MKDirectionsRequest) // 计算导航路线,在闭包ha

【百度地图API】如何制作多途经点的线路导航——驾车篇

转:http://www.cnblogs.com/milkmap/archive/2011/08/26/2154627.html 摘要: 休假结束,酸奶小妹要从重庆驾车去北京.可是途中要去西安奶奶家拿牛奶饼干呢!用百度地图API,能不能帮我实现这个愿望呢? ------------------------------------------------------------------------------------------------------------------------

【百度地图API】怎样制作多途经点的线路导航——驾车篇

摘要: 休假结束,酸奶小妹要从重庆驾车去北京.但是途中要去西安奶奶家拿牛奶饼干呢! 用百度地图API,能不能帮我实现这个愿望呢? ------------------------------------------------------------------------------------------------------------------------ 一.创建地图 首先要告诉大家的是,API1.2版本号取消密钥,取消服务设置,大家能够採用更加简短的方式引用API的JS啦~ <s

MFC数字时钟在VS2013的简易制作

首先,新建一个项目:文件--->新建-->项目.选择MFC应用程序.命名为Clock 下一步后选择基于对话框的应用程序,单击完成. 二,先将对话框中的确定和取消等按钮删除,在工具栏中添加两个Static Text的静态文本框,在俩个文本框的属性设置中,将文字(Align Text)设置居中,边界(Border)设置False,名字(Caption)中的Static删除,分别将两个文本框框的ID设置为IDC_STATIC1和IDC_STATIC2.                        

层叠轮播图的简易制作

之前做过很多不同样式的轮播图,不是通过改变left值使图片左右移动的,就是改变透明度实现轮播图的,偶然在网易云上看到了层叠轮播图,它转换图片的方式和其他轮播图有些不同,我从来没做过这种轮播图,思考了很久该用什么方法做,终于做出来了一个简陋的成品.由于轮播图的图片是网上找来的,所以我做了模糊处理,用清晰的图片效果更好,这里是我的一个演示(没有录制鼠标):  思路和方法 我所能想出的最简单的方法就是先给轮播图中的几张图片特定的class值,再通过改变图片class的值来改变他们的位置 话不多说,上代