Cocoa touch 没有提供地图注解类,只定义了一个 MKAnnotation 协议。要创建地图注解,必须设计符合
一. 设计注解类:
例,注解(大头针)类:
.h
#import <MapKit/MapKit.h>
@interface LocationObject : NSObject <MKAnnotation> {
CLLocationCoordinate2D coordinate;
Nsstring *_TitleString; //Title值
*_subTitleString;
float _latitude// 经度值
float _longitude//纬度值
}
@property (nonatomic, Readonly) 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;
{
currentCoordinate.latitude = _latitude ;
}
// required if you set the MKPinAnnotationVIEw's "canShowCallout" property to YES
- (Nsstring *)Title
{
return self._TitleString;
}
// optional
- (Nsstring *)subTitle
{
}
- (voID)dealloc
{
[_TitleString release];
[_subTitleString ];
}
@end
二、创建、添加和删除注解
1、创建注解:
LocationObject *aLocationObject = [[LocationObject alloc]initWithTitle:nameString latitue:[latitudeString floatValue] longitude:[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 = MKPinAnnotationcolorPurp
mkavIEw.rightCalloutAccessoryVIE
continue;
}
// 其他位置的大头针设为红色,右边添加附属按钮
= MKPinAnnotationcolorRedUIbutton *button = [UIbutton buttonWithType:UIbuttonTypeDetaildisclo
= button;
}
}
四、注解视图 MKPinAnnotationVIEw 的几个属性说明
newAnnotation.animatesDrop = YES;
newAnnotation.canShowCallout=YES;
newAnnotation.pincolor
五、自动显示注解视图(Callout)
- (MKAnnotationVIEw *)mapVIEw:(MKMapVIEw *)mapVIEw vIEwForAnnotation:(ID<MKAnnotation>)annotation
{
。。。。。。
///// 自动显示 Callout
_myAnnotation = annotation;
self performSelector@selector(showCallout) withObjectselfafterDelay:0.1];
}
- (voID)showCallout {
}
总结以上是内存溢出为你收集整理的iphone开发-地图注解(地图上的大头针)全部内容,希望文章能够帮你解决iphone开发-地图注解(地图上的大头针)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)