tutorial current annotation objective-c mkmapview mkannotation mkannotationview

objective c - current - MKMapview place pin at location(long/lat)



mapkit tutorial (6)

Debieras:
1. Agregue el marco MapKit a su proyecto. 2. Cree una clase que implemente el protocolo MKAnnotation.
Muestra:

Anotación.h

@interface Annotation : NSObject <MKAnnotation> { NSString *_title; NSString *_subtitle; CLLocationCoordinate2D _coordinate; } // Getters and setters - (void)setTitle:(NSString *)title; - (void)setSubtitle:(NSString *)subtitle; @end

Anotación.m

@implementation Annotation #pragma mark - #pragma mark Memory management - (void)dealloc { [self setTitle:nil]; [self setSubtitle:nil]; [super dealloc]; } #pragma mark - #pragma mark Getters and setters - (NSString *)title { return _title; } - (NSString *)subtitle { return _subtitle; } - (void)setTitle:(NSString *)title { if (_title != title) { [_title release]; _title = [title retain]; } } - (void)setSubtitle:(NSString *)subtitle { if (_subtitle != subtitle) { [_subtitle release]; _subtitle = [subtitle retain]; } } - (CLLocationCoordinate2D)coordinate { return _coordinate; } - (void)setCoordinate:(CLLocationCoordinate2D)newCoordinate { _coordinate = newCoordinate; } @end

2. crear una instancia de esta clase y establecer la propiedad lat / lon
3. agregue la instancia al objeto MKMapView con este método:

- (void)addAnnotation:(id<MKAnnotation>)annotation

4. Debería establecer el delegado del mapa e implementar el siguiente método:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { if ([annotation isKindOfClass:[MKUserLocation class]]) { return nil; } static NSString* ShopAnnotationIdentifier = @"shopAnnotationIdentifier"; MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:ShopAnnotationIdentifier]; if (!pinView) { pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:ShopAnnotationIdentifier] autorelease]; pinView.pinColor = MKPinAnnotationColorRed; pinView.animatesDrop = YES; } return pinView; }

Tengo latitud y valores largos y necesito poder colocar un alfiler en esta ubicación.

¿Alguien puede dar algún consejo sobre cómo hacer esto?


Encuentre la siguiente solución muy sencilla para colocar el pin en la ubicación dada definida por CLLocationCoordinate2D

Drop Pin en MKMapView

Editado:

CLLocationCoordinate2D ctrpoint; ctrpoint.latitude = 53.58448; ctrpoint.longitude =-8.93772; AddressAnnotation *addAnnotation = [[AddressAnnotation alloc] initWithCoordinate:ctrpoint]; [mapview addAnnotation:addAnnotation]; [addAnnotation release];


Esto supone que tiene ARC habilitado y que ha incluido el marco MapKit.

Primero crea una clase que implemente el protocolo MKAnnotation. Lo llamaremos MapPinAnnotation.

MapPinAnnotation.h

@interface MapPinAnnotation : NSObject <MKAnnotation> @property (nonatomic, readonly) CLLocationCoordinate2D coordinate; @property (nonatomic, readonly) NSString* title; @property (nonatomic, readonly) NSString* subtitle; - (id)initWithCoordinates:(CLLocationCoordinate2D)location placeName:(NSString *)placeName description:(NSString *)description; @end

MapPinAnnotation.m

@implementation MapPinAnnotation @synthesize coordinate; @synthesize title; @synthesize subtitle; - (id)initWithCoordinates:(CLLocationCoordinate2D)location placeName:(NSString *)placeName description:(NSString *)description; { self = [super init]; if (self) { coordinate = location; title = placeName; subtitle = description; } return self; } @end

Luego agregue la anotación al mapa usando lo siguiente:

CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(34.421496, -119.70182); MapPinAnnotation* pinAnnotation = [[MapPinAnnotation alloc] initWithCoordinates:coordinate placeName:nil description:nil]; [mMapView addAnnotation:pinAnnotation];

La clase que contiene tendrá que implementar el protocolo MKMapViewDelegate. En particular, tendrá que definir la siguiente función para dibujar el pin:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { if ([annotation isKindOfClass:[MKUserLocation class]]) { return nil; } static NSString* myIdentifier = @"myIndentifier"; MKPinAnnotationView* pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:myIdentifier]; if (!pinView) { pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:myIdentifier]; pinView.pinColor = MKPinAnnotationColorRed; pinView.animatesDrop = NO; } return pinView; }

En este ejemplo, las variables de miembro de subtítulo y título de MKAnnotation no se utilizan, pero se pueden mostrar en la función de delegado.


Versión rápida

let location = CLLocationCoordinate2DMake(13.724362, 100.515342); let region = MKCoordinateRegionMakeWithDistance(location, 500.0, 700.0) self.mkMapView.setRegion(region, animated: true) // Drop a pin let dropPin = MKPointAnnotation(); dropPin.coordinate = location; dropPin.title = "Le Normandie Restaurant"; self.mkMapView.addAnnotation(dropPin);


-(MKPointAnnotation *)showClusterPoint:(CLLocationCoordinate2D)coords withPos:(NSString *)place { float zoomLevel = 0.5; region = MKCoordinateRegionMake (coords, MKCoordinateSpanMake (zoomLevel, zoomLevel)); [mapView setRegion: [mapView regionThatFits: region] animated: YES]; point = [[MKPointAnnotation alloc]init]; point.coordinate = coords; point.title=place; [mapView addAnnotation:point]; return point; }


Please use this code. its working fine. -(void)addAllPinsOnMapView { MKCoordinateRegion region = mapViewOffer.region; region.center = CLLocationCoordinate2DMake(23.0225, 72.5714); region.span.longitudeDelta= 0.1f; region.span.latitudeDelta= 0.1f; [mapViewOffer setRegion:region animated:YES]; mapViewOffer.delegate=self; MKPointAnnotation *mapPin = [[MKPointAnnotation alloc] init]; CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(23.0225, 72.5714); mapPin.title = @"Title"; mapPin.coordinate = coordinate; [mapViewOffer addAnnotation:mapPin]; } - (void)mapView:(MKMapView *)mapView didSelectAnnotationView: (MKAnnotationView *)view { NSLog(@"%@",view.annotation.title); NSLog(@"%f",view.annotation.coordinate.latitude); NSLog(@"%f",view.annotation.coordinate.longitude); } - (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation { if ([annotation isKindOfClass:[MKUserLocation class]]) { ((MKUserLocation *)annotation).title = @"Current Location"; return nil; } else { MKAnnotationView *pinView = nil; static NSString *defaultPinID = @"annotationViewID"; pinView = (MKAnnotationView *)[mapViewOffer dequeueReusableAnnotationViewWithIdentifier:defaultPinID]; if ( pinView == nil ){ pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID]; } pinView.canShowCallout = YES; pinView.image = [UIImage imageNamed:@"placeholder"]; UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; // [infoButton addTarget:self action:@selector(infoButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; pinView.rightCalloutAccessoryView = infoButton; pinView.rightCalloutAccessoryView.tag=1; return pinView; } } - (MKPinAnnotationView*)myMap:(MKMapView*)myMap viewForAnnotation: (id<MKAnnotation>)annotation{ MKPinAnnotationView *pin = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:@"CustomPin"]; UIImage *icon = [UIImage imageNamed:@"bustour.png"]; UIImageView *iconView = [[UIImageView alloc] initWithFrame:CGRectMake(8,0,32,37)]; if(icon == nil) NSLog(@"image: "); else NSLog(@"image: %@", (NSString*)icon.description); [iconView setImage:icon]; [pin addSubview:iconView]; pin.canShowCallout = YES; pin.pinColor = MKPinAnnotationColorPurple; return pin; } - (IBAction)btnLocateMe:(UIButton *)sender { [mapViewOffer setCenterCoordinate:mapViewOffer.userLocation.location.coordinate animated:YES]; }