首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

在MKMapView中设立区域显示所有注释

2013-04-12 
在MKMapView中设置区域显示所有注释原问题来自于CSDN问答频道,更多解决方案见:http://ask.csdn.net/questi

在MKMapView中设置区域显示所有注释

原问题来自于CSDN问答频道,更多解决方案见:http://ask.csdn.net/questions/2005

问题描述:

有10-15个经纬度需要同时显示在地图上,怎么设置区域这样可以在地图中看到所有的注释?

解决方案:

create class as below. create two class: ViewController is class of UIViewController and MapViewAnnotation is class of NSObject. I have created that two class as  below. bind mapview in XIB of ViewController and set delegate.#import <UIKit/UIKit.h>#import <MapKit/MapKit.h>#import "MapViewAnnotation.h"@interface ViewController : UIViewController<MKMapViewDelegate>{    IBOutlet  MKMapView* mapView;     NSMutableArray *arrayLocation;}@end#import "ViewController.h"@implementation ViewController- (void)viewDidLoad{    [super viewDidLoad];    arrayLocation = [[NSMutableArray alloc]init];    NSMutableArray *arrAnnotations  = [[NSMutableArray alloc]init];    NSMutableDictionary *dict = [[NSMutableDictionary alloc]init];    [dict setValue:@"32.774125" forKey:@"latitude"];    [dict setValue:@"-117.240658" forKey:@"longitude"];    [dict setValue:@"Bars & Restaurants 1" forKey:@"title"];    [arrayLocation addObject:dict];    dict = nil;    dict = [[NSMutableDictionary alloc]init];    [dict setValue:@"32.784526" forKey:@"latitude"];    [dict setValue:@"-117.240985" forKey:@"longitude"];    [dict setValue:@"Bars & Restaurants 2" forKey:@"title"];    [arrayLocation addObject:dict];    dict = nil;    dict = [[NSMutableDictionary alloc]init];    [dict setValue:@"32.773477" forKey:@"latitude"];    [dict setValue:@"-117.241144" forKey:@"longitude"];    [dict setValue:@"Bars & Restaurants 3" forKey:@"title"];    [arrayLocation addObject:dict];    dict = nil;    dict = [[NSMutableDictionary alloc]init];    [dict setValue:@"32.775301" forKey:@"latitude"];    [dict setValue:@"-117.238893" forKey:@"longitude"];    [dict setValue:@"Bars & Restaurants 4" forKey:@"title"];    [arrayLocation addObject:dict];    dict = nil;    for(int i=0;i<[arrayLocation count];i++)    {        CLLocationCoordinate2D location;        location.latitude = [[[arrayLocation objectAtIndex:i] objectForKey:@"latitude"] doubleValue];        location.longitude = [[[arrayLocation objectAtIndex:i] objectForKey:@"longitude"] doubleValue];        MapViewAnnotation *newAnnotation = [[MapViewAnnotation alloc] initWithTitle:[[arrayLocation objectAtIndex:i] objectForKey:@"title"] Coordinate:location andIndex:i];        [arrAnnotations addObject:newAnnotation];     }    [mapView addAnnotations:arrAnnotations];    mapView.region = [MapViewAnnotation regionForAnnotations:arrAnnotations];}- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation {    if (annotation == mapView.userLocation)    {        return nil;    }    MKPinAnnotationView *pin = (MKPinAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier: @"restMap"];    if (pin == nil)     {        pin = [[MKPinAnnotationView alloc] initWithAnnotation: annotation reuseIdentifier: @"restMap"];    }    else     {        pin.annotation = annotation;    }    pin.pinColor = MKPinAnnotationColorRed;    pin.animatesDrop = NO;    pin.canShowCallout=TRUE;    UIButton *btn=[UIButton buttonWithType:UIButtonTypeDetailDisclosure];    MapViewAnnotation *temp = (MapViewAnnotation *)pin.annotation;    btn.tag=temp.index;    pin.rightCalloutAccessoryView=btn;    [btn addTarget:self action:@selector(openDetail:) forControlEvents:UIControlEventTouchUpInside];    return pin;}@endImplementation of MapViewAnnotation class#import <MapKit/MapKit.h>@interface MapViewAnnotation : NSObject <MKAnnotation , MKMapViewDelegate>{    NSString *title;    int index;    CLLocationCoordinate2D coordinate;}@property (nonatomic, copy) NSString *title;@property (nonatomic, readwrite) int index;@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;- (id)initWithTitle:(NSString *)ttl andCoordinate:(CLLocationCoordinate2D)c2d;- (id)initWithTitle:(NSString *)ttl Coordinate:(CLLocationCoordinate2D)c2d andIndex:(int)intIndex;+(MKCoordinateRegion) regionForAnnotations:(NSArray*) annotations ;@end#import "MapViewAnnotation.h"@implementation MapViewAnnotation@synthesize title, coordinate,index;- (id)initWithTitle:(NSString *)ttl andCoordinate:(CLLocationCoordinate2D)c2d {    self = [super init];    title = ttl;    coordinate = c2d;    return self;}- (id)initWithTitle:(NSString *)ttl Coordinate:(CLLocationCoordinate2D)c2d andIndex:(int)intIndex{    self = [super init];    title = ttl;    coordinate = c2d;    index = intIndex;    return self;}+(MKCoordinateRegion) regionForAnnotations:(NSArray*) annotations {    NSAssert(annotations!=nil, @"annotations was nil");    NSAssert([annotations count]!=0, @"annotations was empty");    double minLat=360.0f, maxLat=-360.0f;    double minLon=360.0f, maxLon=-360.0f;    for (id<MKAnnotation> vu in annotations) {        if ( vu.coordinate.latitude  < minLat ) minLat = vu.coordinate.latitude;        if ( vu.coordinate.latitude  > maxLat ) maxLat = vu.coordinate.latitude;        if ( vu.coordinate.longitude < minLon ) minLon = vu.coordinate.longitude;        if ( vu.coordinate.longitude > maxLon ) maxLon = vu.coordinate.longitude;    }    CLLocationCoordinate2D center = CLLocationCoordinate2DMake((minLat+maxLat)/2.0, (minLon+maxLon)/2.0);    MKCoordinateSpan span = MKCoordinateSpanMake(maxLat-minLat, maxLon-minLon);    MKCoordinateRegion region = MKCoordinateRegionMake (center, span);    return region;}@end


 

热点排行