iphone开发-地图注解(地图上的大头针)

iphone开发-地图注解(地图上的大头针),第1张

概述Cocoa Touch 没有提供地图注解类,只定义了一个 MKAnnotation 协议。要创建地图注解,必须设计符合 MKAnnotation 协议的类,该类需要一个 CLLocationCoordinate2D coordinate 属性,以及 title 和 subtitle 实例方法, 一. 设计注解类: 例,注解(大头针)类: .h #import <MapKit/MapKit.h> @

Cocoa touch 没有提供地图注解类,只定义了一个 MKAnnotation 协议。要创建地图注解,必须设计符合 MKAnnotation 协议的类,该类需要一个 CLLocationCoordinate2D coordinate 属性,以及 Title 和 subTitle 实例方法,


一. 设计注解类:

例,注解(大头针)类:

.h

#import <MapKit/MapKit.h>


@interface LocationObject : NSObject <MKAnnotation> {

CLLocationCoordinate2D coordinate;

Nsstring *_TitleString; //Title

*_subTitleString;

float _latitude// 经度值

float _longitude//纬度值

}


@property (nonatomicReadonly) CLLocationCoordinate2D coordinate;

@property float _latitude; @property float _longitude; 纬度值

copy) Nsstring *_TitleString; 

copy) Nsstring *_subTitleString;


- (ID) initWithTitle:(Nsstring *)aTitle latitue:(float)alatitude longitude:(float)alongitude;


@end

---------------------

.m

@implementation LocationObject

@synthesize coordinate,_latitude,_longitude,_TitleString,_subTitleString;


- (float)alongitude

{

if(self=[super init])

{

self._TitleString = aTitle;

_latitude = alatitude;

_longitude = alongitude;

}

return self;

}


- (CLLocationCoordinate2D)coordinate;

{

    CLLocationCoordinate2D currentCoordinate;

currentCoordinate.latitude = _latitude ;

    currentCoordinate.longitude = _longitude;

    return currentCoordinate; 

}


// required if you set the MKPinAnnotationVIEw's "canShowCallout" property to YES

- (Nsstring *)Title

{

return self._TitleString;

}

// optional

- (Nsstring *)subTitle

{

    return _subTitleString;

}


- (voID)dealloc

{

[_TitleString release];

[_subTitleString ];

    [super dealloc];

}


@end


二、创建、添加和删除注解

1、创建注解:

LocationObject *aLocationObject = [[LocationObject alloc]initWithTitle:nameString latitue:[latitudeString floatValuelongitude:[longitudeString floatValue]];

aLocationObject._subTitleString = addressstring;


2、添加注解:

先构建一个注解数组 NSMutableArray *_mapAnnotations;

然后 

[_mapAnnotations addobject:aLocationObject];

[._mapVIEw addAnnotations:._mapAnnotations];


3、删除注解:

删除注解可执行 removeAnnotation:一次只删除一个注解,或者执行 removeAnnotation:删除一个数组中的所有项。

如果需要使地图视图回到无注解状态,可执行:

_mapVIEw removeAnnotations_mapVIEw.annotations];

删除其中全部注解,MKMapVIEw  annotations 属性获取了所有注解的数组,然后从地图上全部删除。


三、注解视图 

注解对象并非视图,是描述注解的抽象类。注解视图是属于 MKAnnotationVIEw 的子类 MKPinAnnotationVIEw,当地图通过 addAnnotation:或 addAnnotations:添加了注解后,MKMapVIEwDelegate 协议的委托方法 - (voID)mapVIEw:(MKMapVIEw *)mapVIEwdIDAddAnnotationVIEws:(NSArray *)vIEws 就会通知委托,可以在此回调方法里设置注解视图,如设置大头针颜色、添加附属按钮等,例:

- (voID)mapVIEw:(MKMapVIEw *)mapVIEw dIDAddAnnotationVIEws:(NSArray *)vIEws

{

// Initialize each vIEw

for (MKPinAnnotationVIEw *mkavIEw in vIEws)

{

// 当前位置 的大头针设为紫色,并且没有右边的附属按钮

if ([mkavIEw.annotation.Title isEqualToString:@"当前位置"]) 

{

mkavIEw.pincolor = MKPinAnnotationcolorPurple;

mkavIEw.rightCalloutAccessoryVIE= nil;

continue;

}

 

// 其他位置的大头针设为红色,右边添加附属按钮

= MKPinAnnotationcolorRedUIbutton *button = [UIbutton buttonWithType:UIbuttonTypeDetaildisclosure];

= button;

}

}


四、注解视图 MKPinAnnotationVIEw 的几个属性说明


newAnnotation.animatesDrop = YES // 大头针掉落的动画开启,NO-关闭


newAnnotation.canShowCallout=YES // 控制轻击按钮是否生成一个注解视图,默认为Yes-开启


newAnnotation.pincolor    // 设置大头针颜色,一共有三种颜色:红色(MKPinAnnotationcolorRed),绿色(MKPinAnnotationcolorGreen),紫色(MKPinAnnotationcolorPurple



五、自动显示注解视图(Callout)

- (MKAnnotationVIEw *)mapVIEw:(MKMapVIEw *)mapVIEw vIEwForAnnotation:(ID<MKAnnotation>)annotation

{

。。。。。。

///// 自动显示 Callout

_myAnnotation = annotation;

self performSelector@selector(showCallout) withObjectselfafterDelay:0.1];

 

  return newAnnotation;

}


- (voID)showCallout {

    [_mapVIEw selectAnnotation:_myAnnotation animatedYES]; 

}

总结

以上是内存溢出为你收集整理的iphone开发-地图注解(地图上的大头针)全部内容,希望文章能够帮你解决iphone开发-地图注解(地图上的大头针)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1057131.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存