zoukankan      html  css  js  c++  java
  • mapview 标注多个地点

    Very new to xcode and somewhat confused. I was able to use a custom image for annotation - works fine. Problem is that I want to do is have a different images for each of the annotations. What should I add/change to the code below? Thanks in advance and remember, I'm a newbee!


    #import "MapViewController.h"

    @interface AddressAnnotation : NSObject<MKAnnotation> { CLLocationCoordinate2D coordinate; NSString *mTitle; NSString *mSubTitle; UIImage *image; } @property (nonatomic, retain) UIImage *image; @end @implementation AddressAnnotation @synthesize coordinate; @synthesize image; - (NSString *)subtitle{ return mSubTitle; } - (NSString *)title{ return mTitle; } -(id)initWithCoordinate:(CLLocationCoordinate2D) c Title: (NSString *)title SubTitle: (NSString *) subTitle{ coordinate=c; mTitle = [title retain]; mSubTitle = [subTitle retain]; NSLog(@"%f,%f",c.latitude,c.longitude); return self; } -(void) dealloc{ [super dealloc]; [mTitle release]; [mSubTitle release]; } @end @implementation MapViewController // The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. /* - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization. } return self; } */ // Implement viewDidLoad to do additional setup after loading the view, typically from a nib. - (void)viewDidLoad { [super viewDidLoad]; //------ To Set center of the map ------ CLLocationCoordinate2D center; center.latitude = 37.83792; center.longitude = -122.247865; MKCoordinateRegion region; MKCoordinateSpan span; span.latitudeDelta = 0.05; span.longitudeDelta = 0.05; region.center = center; region.span = span; [mapView setRegion:region animated:YES]; //------ To Add a point of interest ------ CLLocationCoordinate2D c1; // Point one c1.latitude = 37.8393624; c1.longitude = -122.2436549; AddressAnnotation* ad1 = [[AddressAnnotation alloc] initWithCoordinate:c1 Title:@"title here" SubTitle:@"subtitle here"]; ad1.image = [UIImage imageNamed:@"img01.png"]; [mapView addAnnotation:ad1]; [ad1 release]; // Point two c1.latitude = 37.835964; c1.longitude = -122.250538; AddressAnnotation* ad2 = [[AddressAnnotation alloc] initWithCoordinate:c1 Title:@"title here" SubTitle:@"subtitle here"]; ad2.image = [UIImage imageNamed:@"img02.png"]; [mapView addAnnotation:ad2]; [ad2 release]; // Point three c1.latitude = 37.8317039; c1.longitude = -122.2454169; AddressAnnotation* ad3 = [[AddressAnnotation alloc] initWithCoordinate:c1 Title:@"title here" SubTitle:@"subtitle here"]; ad3.image = [UIImage imageNamed:@"img03.png"]; [mapView addAnnotation:ad3]; [ad3 release]; //---------------------------------------- } - (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation { if ([annotation isKindOfClass:[AddressAnnotation class]]) { static NSString *AnnotationIdentifier = @"AnnotationIdentifier"; MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationIdentifier]; if (!pinView) { pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier] autorelease]; pinView.canShowCallout = YES; pinView.animatesDrop = YES; } else { pinView.annotation = annotation; } UIImageView *leftCalloutView = [[UIImageView alloc] initWithImage:((AddressAnnotation *)annotation).image]; pinView.leftCalloutAccessoryView = leftCalloutView; [leftCalloutView release]; return pinView; } return nil; } /* // Override to allow orientations other than the default portrait orientation. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations. return (interfaceOrientation == UIInterfaceOrientationPortrait); } */ - (void)didReceiveMemoryWarning { // Releases the view if it doesn't have a superview. [super didReceiveMemoryWarning]; // Release any cached data, images, etc. that aren't in use. } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. // e.g. self.myOutlet = nil; } - (void)dealloc { [super dealloc]; }

    @end



    To display your own image instead of the standard pin, create a plain MKAnnotationView instead of aMKPinAnnotationView and set its image property instead of the leftCalloutAccessoryView:

    - (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation
    {
        if ([annotation isKindOfClass:[AddressAnnotation class]])
        {
            static NSString *AnnotationIdentifier = @"AnnotationIdentifier";
            MKAnnotationView *pinView = [mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationIdentifier];
            if (!pinView)
            {
                pinView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier] autorelease];
                pinView.canShowCallout = YES;
            }
            else
            {
                pinView.annotation = annotation;
            }
    
            pinView.image = ((AddressAnnotation *)annotation).image;
    
            return pinView;
        }
    
        return nil;
    }
    

    Note that the MKAnnotationView class doesn't have an animatesDrop property likeMKPinAnnotationView so the annotations won't drop on the map. If a drop animation is required, it will have to be done manually (eg. in didAddAnnotationViews).

  • 相关阅读:
    最容易忽略的的前端面试基础题目
    关于浮动宽度不够掉盒子的问题解决方法
    最容易忽略的的前端面试基础题目
    构造字典
    Python数据类型---字典
    Python数据类型---列表
    Python数据类型---字符串
    我要学习Python
    [IT练习册]Python练习项目 思路
    【CTF】后续深入学习内容
  • 原文地址:https://www.cnblogs.com/zzxap/p/2175631.html
Copyright © 2011-2022 走看看