2014-02-20 3 views
2

카메라에서 찍은 사진이나 라이브러리에서 선택한 사진을 사용할 수 있도록 며칠 동안 노력했습니다. 선택한 이미지/핀으로 찍은 이미지.사진을 가지고지도보기의 핀으로 사용합니다.

액션 시트를 가져 와서 사용자가 사진을 선택/가져올 수있게되었습니다. 나는 또한 사용자에게 핀을 떨어 뜨릴 수있다. 여기에 이러한 작업 모두에 사용했던 코드 :

//To take a photo 
- (IBAction)takePhoto:(id)sender { 
    // Opens Action Sheet 
    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Add a picture to the map" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Take a picture",@"Choose from photos", nil]; 
    [actionSheet showInView:self.view]; 

} 

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
    [imageView setImage:image]; 

    [self dismissModalViewControllerAnimated:YES]; 
} 

- (void) imagePickerControllerDidCancel:(UIImagePickerController *)picker { 
    [self dismissModalViewControllerAnimated:YES]; 
} 

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { 
    picker2 = [[UIImagePickerController alloc] init]; 
    picker2.delegate = self; 

    if (buttonIndex == 0) { 
     [picker2 setSourceType:UIImagePickerControllerSourceTypeCamera]; 

    } else if (buttonIndex == 1) { 
     [picker2 setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; 
    } 
    [self presentModalViewController:picker2 animated:YES]; 

} 

//To drop a pin 
     [self.view addSubview:mapview]; 

    MKCoordinateRegion region = {mapview.userLocation.location.coordinate.latitude,mapview.userLocation.location.coordinate.longitude}; 
    CLLocationCoordinate2D myCoord = {mapview.userLocation.location.coordinate.latitude,mapview.userLocation.location.coordinate.longitude}; 
    [mapview setCenterCoordinate:myCoord animated:YES]; 

    region.span.longitudeDelta = 0.01f; 
    region.span.latitudeDelta = 0.01f; 
    [mapview setRegion:region animated:YES]; 
    [mapview setDelegate:self]; 

    Annotation *ann = [[Annotation alloc]initWithLocation:CLLocationCoordinate2DMake(37.616815,-122.389682)]; 
    [mapview addAnnotation:ann]; 
    ann.title = @"Start"; 
    ann.subtitle = @"Subtitle for annotation"; 
    ann.coordinate = myCoord; 
    ann.image = imageView; 

    [self setTitle:@"Map View"]; 

    [mapview selectAnnotation:ann animated:YES]; 
    [mapview addAnnotation:ann]; 

내가 함께 이들을 통합하고 촬영 한 이미지가 핀으로 사용되도록 그것을 만들 수있는 방법에 확실 해요, 어떤 도움을 크게 감사합니다.

답변

0

당신이 당신의 주석을 추가 할 때, 당신의 이미지 (코드는 애플 예제를 사용하여 혼합)을 설정할 수 있습니다 :

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    if ([annotation isKindOfClass:[Annotation class]]) 
    { 
     return [self registerAnnotation:annotation withIdentifier:@"AnnotationID" withImage:self.personImage.image]; 
    } 
    else 
    { 
     return nil; 
    } 
} 

- (MKAnnotationView*)registerAnnotation:(id<MKAnnotation>)annotation withIdentifier:(NSString*)identifier withImage:(UIImage*)image 
{ 
    NSLog(@"annotationIdentifier: %@", identifier); 
    MKAnnotationView *flagAnnotationView = [self.mapView dequeueReusableAnnotationViewWithIdentifier:identifier]; 

    if (flagAnnotationView == nil) 
    { 
     flagAnnotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier]; 
     flagAnnotationView = [self resizeAnnotationFromAnnotation:flagAnnotationView andSetImage:image]; 
    } 
    else 
    { 
     flagAnnotationView.annotation = annotation; 
    } 
    return flagAnnotationView; 
} 

- (MKAnnotationView*)resizeAnnotationFromAnnotation:(MKAnnotationView*)annotationView andSetImage:(UIImage*)flagImage 
{ 
    annotationView.canShowCallout = YES; 
    annotationView.opaque = NO; 

    CGRect resizeRect = [self resizeAnnotationFromSize:flagImage.size]; 
    UIImage *resizedImage = [self resizeImageFromCGRect:resizeRect andImage:flagImage]; 
    annotationView.image = resizedImage; 

    // offset the flag annotation so that the flag pole rests on the map coordinate 
    annotationView.centerOffset = CGPointMake(annotationView.centerOffset.x + annotationView.image.size.width/2, annotationView.centerOffset.y - annotationView.image.size.height/2); 
    return annotationView; 
} 

- (UIImage*)resizeImageFromCGRect:(CGRect)resizeRect andImage:(UIImage*)flagImage 
{ 
    UIGraphicsBeginImageContext(resizeRect.size); 
    [flagImage drawInRect:resizeRect]; 
    UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return resizedImage; 
} 

- (CGRect)resizeAnnotationFromSize:(CGSize)size 
{ 
    // size the flag down to the appropriate size 
    CGRect resizeRect; 
    resizeRect.size = size; 
    CGSize maxSize = CGRectInset(self.view.bounds, [self annotationPadding], [self annotationPadding]).size; 
    maxSize.height -= self.navigationController.navigationBar.frame.size.height + [self calloutHeight]; 

    if (resizeRect.size.width > maxSize.width) 
     resizeRect.size = CGSizeMake(maxSize.width, resizeRect.size.height/resizeRect.size.width * maxSize.width); 
    if (resizeRect.size.height > maxSize.height) 
     resizeRect.size = CGSizeMake(resizeRect.size.width/resizeRect.size.height * maxSize.height, maxSize.height); 

    resizeRect.origin = CGPointMake(0.0, 0.0); 

    return resizeRect; 
} 
관련 문제