Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

gbenna

macrumors member
Original poster
Jul 27, 2011
62
0
I am trying to learn how to drop a pin inside an app that has a title and a picture. These would come from an NSDictionary loaded from a previous view Controller.

This is the structure


MainViewController (NSDictionary with annotation title and image objects for keys)

Loads a DetailViewController map view with different title and image depending on variable in MainViewController

DetailViewController shows user's location. A pin is dropped at that location with the title and image loaded from the MainViewController's NSDictionary.

This is my question.

1. I have the correct title showing up from the Dictionary but i can't change the pin Color and the image isn't showing up.

Here is the code I use to drop the pin and show the annotations.


Code:
-(void) viewDidLoad {


 [mapView1 setMapType:MKMapTypeHybrid];
[mapView1 setZoomEnabled:YES];
[mapView1 setScrollEnabled:YES];
    MKCoordinateRegion region = { {0.0,0.0}, {0.0,0.0} };
    region.center.latitude =locationManager.location.coordinate.latitude;
    region.center.longitude= locationManager.location.coordinate.longitude;
region.span.longitudeDelta = 0.001f;
region.span.latitudeDelta = 0.001f;
[mapView1 setRegion:region animated:YES];
    [mapView1 setDelegate:self];   
}



- (IBAction)getLocation:(id)sender {
    
    
    locationManager= [[CLLocationManager alloc] init];
    locationManager.distanceFilter=kCLDistanceFilterNone;
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
    [locationManager startUpdatingLocation];
    
    [mapView1 setMapType:MKMapTypeHybrid];
    [mapView1 setZoomEnabled:YES];
    [mapView1 setScrollEnabled:YES];
    MKCoordinateRegion region = {{0.0,0.0},{0.0,0.0}};
    region.center.latitude = locationManager.location.coordinate.latitude;
    region.center.longitude = locationManager.location.coordinate.longitude;
    region.span.longitudeDelta = 0.001f;
    region.span.latitudeDelta = 0.001f;
    [mapView1 setRegion:region animated:YES];
    [mapView1 setDelegate:sender];
    
  
    DetailViewController *ann1 =[[DetailViewController alloc] init];
    ann1.title=[(NSMutableDictionary *)mapDictionary objectForKey:@"titlekey"];
    
    ann1.coordinate= region.center;
    [mapView1 addAnnotation:ann1];
    
}


- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
    MKPinAnnotationView *pinView = nil;
        if (annotation == mapView1.userLocation) {
[mapView1 setCenterCoordinate:mapView1.userLocation.coordinate animated:YES];
return nil;
            static NSString *defaultPinID = @"com.invasivecode.pin";
            pinView = (MKPinAnnotationView *) [mapView1 dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
            if (pinView == nil) pinView = [[MKPinAnnotationView alloc]
                                            
                                            initWithAnnotation:annotation reuseIdentifier:defaultPinID];
            
            
            pinView.canShowCallout = YES;
            pinView.animatesDrop = YES;
            
            if([[annotation title] isEqualToString:[(NSMutableDictionary *)mapDictionary objectForKey:@"titlekey"]])
            {

               //here is where I try to change the color of the pin (no go)
             pinView.pinColor = MKPinAnnotationColorGreen;

                   //Here is where I try to load the image from the Document's directory into the pin.  For some reason is part of the annotation isn't showing up or being called
            NSString *imageName = [mapDictionary objectForKey:@"mapimagekey"];
            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,   
                                                                 NSUserDomainMask, YES);
            NSString *documentsDirectory = [paths objectAtIndex:0];
            //Get a full path to the image in the documents directory.
            NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:imageName];
            
            //Now load the image at fullPath and install it into our image view's image property.
            
            UIImageView *myImageView = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile: fullPath]];
            myImageView.frame = CGRectMake (0,0,90,60);
            pinView.leftCalloutAccessoryView = myImageView;
             }
}
    return pinView;
}


Can anyone see where I've gone wrong here? Should the annotation part of the code be included inside the IBAction code?

Thanks for your help

I got this going. I tried to delete the post but I'm not sure how to do this. clicked on edit/delete got edit / no delete.
 
Last edited:
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.