Я добавляю аннотации для местоположений, взятых из базы данных в MKMapView. Среди всех местоположений одно из местоположений является центральным местоположением. Значок, указывающий местоположение центра, будет иметь изображение, отличное от остальных меток местоположения. Кроме того, на булавке центрального местоположения должен отображаться заголовок, когда пользователь нажимает на нее. Вот код, который я пытаюсь:
-(void)addPinWithTitle:(NSString *)lat longitude:(NSString*)longi
{
//get centerLocation
NSString* centerLat=[GroupLocation getGroupLat];
NSString* centerLon=[GroupLocation getGroupLon];
MKPointAnnotation *mapPin = [[MKPointAnnotation alloc] init];
double latitude =[lat doubleValue];
double longitude =[longi doubleValue];
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(latitude, longitude);
mapPin.coordinate = coordinate;
if([lat isEqualToString:centerlat] && [longi isEqualToString:groupLon]){
map.title=@"demoTitle";
}
[myMapView addAnnotation:mapPin];
}
- (MKAnnotationView *)mapView:(MKMapView *)mapview viewForAnnotation:(id <MKAnnotation>)annotation
{
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;
static NSString* AnnotationIdentifier = @"AnnotationIdentifier";
MKAnnotationView *annotationView = [myMapView dequeueReusableAnnotationViewWithIdentifier:AnnotationIdentifier];
if(annotationView)
return annotationView;
else
{
MKAnnotationView *annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation
reuseIdentifier:AnnotationIdentifier];
annotationView.canShowCallout = YES;
annotationView.image = [UIImage imageNamed:@"red_dotFromPaint.png"];
UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
// [rightButton addTarget:self action:@selector(writeSomething:) forControlEvents:UIControlEventTouchUpInside];
[rightButton setTitle:annotation.title forState:UIControlStateNormal];
annotationView.rightCalloutAccessoryView = rightButton;
annotationView.draggable = YES;
return annotationView;
}
return nil;
}
Используя вышеуказанные методы, я показал все местоположения, извлеченные из базы данных в mkmapview, но теперь я не понимаю, как отображать другое изображение для определенного булавки местоположения и заголовка, когда пользователь нажимает этот центральный стержень. Кто-нибудь, подскажите, пожалуйста, как этого добиться. Заранее спасибо!
1 ответ
Пример кода, необходимого для изменения широты, долготы, заголовка и подзаголовка.
ViewController.m
#import "ViewController.h"
#import <MapKit/MapKit.h>
#import "V3AnnotationView.h"
@interface ViewController () {
IBOutlet MKMapView *myMapView;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSMutableArray *arrAnnotation = [[NSMutableArray alloc] init];
V3AnnotationView *annotation = [[V3AnnotationView alloc] init];
annotation.title = @"Ahmedabad";
annotation.image = [UIImage imageNamed:@"icon1.png"];
annotation.subtitle = @"City";
annotation.coordinate = CLLocationCoordinate2DMake(23.0225, 72.5714);
[arrAnnotation addObject:annotation];
V3AnnotationView *annotationAirport = [[V3AnnotationView alloc] init];
annotationAirport.title = @"Airport";
annotationAirport.image = [UIImage imageNamed:@"airport.png"];
annotationAirport.subtitle = @"Airport";
annotationAirport.coordinate = CLLocationCoordinate2DMake(23.0734, 72.6266);
[arrAnnotation addObject:annotationAirport];
V3AnnotationView *annotationCarParking = [[V3AnnotationView alloc] init];
annotationCarParking.title = @"Car";
annotationCarParking.image = [UIImage imageNamed:@"carparking.png"];
annotationCarParking.subtitle = @"Free parking";
annotationCarParking.coordinate = CLLocationCoordinate2DMake(23.0225, 72.6714);
[arrAnnotation addObject:annotationCarParking];
V3AnnotationView *annotationWifi = [[V3AnnotationView alloc] init];
annotationWifi.title = @"Wifi";
annotationWifi.image = [UIImage imageNamed:@"wifi-512.png"];
annotationWifi.subtitle = @"Free wifi";
annotationWifi.coordinate = CLLocationCoordinate2DMake(23.0225, 72.7714);
[arrAnnotation addObject:annotationWifi];
[myMapView addAnnotations:arrAnnotation];
}
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
// Handle any custom annotations.
if ([annotation isKindOfClass:[V3AnnotationView class]])
{
V3AnnotationView *myAnnotation = (V3AnnotationView *)annotation;
// Try to dequeue an existing pin view first.
MKAnnotationView *pinView = (MKAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:@"CustomPinAnnotationView"];
if (!pinView)
{
// If an existing pin view was not available, create one.
pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"CustomPinAnnotationView"];
//pinView.animatesDrop = YES;
pinView.canShowCallout = YES;
pinView.calloutOffset = CGPointMake(0, 4);
} else {
pinView.annotation = annotation;
}
pinView.image = myAnnotation.image;
return pinView;
}
return nil;
}
Вам нужно создать класс MKAnnotationView и скопировать приведенный ниже код в свой файл класса.
V3AnnotationView.h
#import <MapKit/MapKit.h>
@interface V3AnnotationView : MKAnnotationView
@property (nonatomic,assign) CLLocationCoordinate2D coordinate;
@property (nonatomic,copy) NSString *title;
@property (nonatomic,copy) NSString *subtitle;
@property (nonatomic,retain) UIImage *image;
@end
V3AnnotationView.m
#import "V3AnnotationView.h"
@implementation V3AnnotationView
@synthesize title,subtitle,coordinate,image;
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.