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 }

这样雏形算是出来了。

转载于:https://www.cnblogs.com/flashEye/p/3915365.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值