2013-11-25 5 views
-1

В моем приложении у меня есть mapView и несколько других компонентов.
Я изменил представление аннотации на свои собственные значки, иконы отображаются в определенном месте широты и долготы.
Но, когда я нажимаю и удерживаю значки, он автоматически преобразуется в анотации.
Пожалуйста, помогите мне.
Это моя карта при загрузкеdidSelectAnnotationView метод создает ошибку

enter image description here

становится таковым, когда я нажимаю и удерживайте аннотации

enter image description here

didUpdateUserLocation 
{ 
CLLocationCoordinate2D first; 
first.latitude=13.040202; 
first.longitude=80.24298; 
myAnnotation.coordinate=first; 
[locations addObject:myAnnotation]; 
[self.mapView addAnnotations:locations]; 
} 

viewForAnnotation: 
{ 
static NSString *identifier = @"Wifintech"; 
pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier]; 
if (pinView == nil) 
     pinView = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:identifier]; 
pinView.image = [UIImage imageNamed:@"car-side.png"]; 
pinView.canShowCallout = YES; 
} 

didSelectAnnotationView 
{ 
float latitude = [[view annotation ] coordinate].latitude; 
float longitude = [[view annotation ] coordinate].longitude; 
title_value=[[view annotation] title]; 
NSString * subtitle_val =[[view annotation] subtitle]; 
title_para.text=[NSString stringWithFormat:@"%@, %@",title_value,subtitle_val]; 
latitude_value.text=[NSString stringWithFormat:@"%f",latitude]; 
longitude_value.text=[NSString stringWithFormat:@"%f",longitude]; 

} 
+0

Показать код, напр. методы делегирования mapView и код, в который вы добавляете аннотации к карте. – Joride

+0

Почему бы не скопировать-вставить код? Сейчас мы рассматриваем интерпретацию вашего кода.Отладка вашего реального кода - это одно, но отладка вашей интерпретации вашего кода не имеет смысла. Если это действительно не ваш код, я могу только сказать, что вы должны правильно изучить Objective-C, поскольку это не правильный синтаксис для методов. – Joride

+0

Я только что дал некоторый намек на мой код, а не на полное кодирование, не зная цели c, как я мог бы разработать вышеупомянутое представление. – chandru

ответ

1

При использовании собственных изображений вам необходимо создать MKAnnotationView, а не MKPinAnnotationView. Пожалуйста, попробуйте найти ответы на SO, прежде чем отправлять вопросы (это спасет всех, включая вас, много времени).

MKAnnotationView ClassReference

0

Я думаю, вам нужно внимательно посмотреть на следующую документацию. Кроме того, возможно, убедитесь, что представление в методе didSelect .. на самом деле является pinAnnotionView и что изображение - это то, что вы думаете.

Из документации на MKAnnotationView:

просмотры аннотаций поддерживают концепцию состояния выбора, который определяет, является ли невыбранным вид, выбран или выбрана и отображением стандартного просмотра выноски. Пользователь переключает между состояниями выбора через взаимодействия с представлением аннотации. В невыбранном состоянии представление аннотации отображается, но не подсвечивается. В выбранном состоянии аннотация выделяется, но выноска не отображается. И, наконец, аннотация может отображаться как с подсветкой, так и с выносом. В окне выноска отображается дополнительная информация, такая как строка заголовка и элементы управления для просмотра дополнительной информации. Информация заголовка предоставляется объектом аннотации, но в представлении аннотации отвечает за предоставление каких-либо настраиваемых элементов управления. Для получения дополнительной информации см. Примечания к подклассам.

+0

Ya k, но я не думаю, что ответ ур имеет отношение к моему запросу – chandru

+0

Не хотите ли вы уточнить, почему это не относится к вашему запросу? – Joride

+0

На самом деле, я знаю о том, что вы дали, мой запрос заключается в том, почему изображение значка меняется при нажатии и перетаскивании кнопки, – chandru

0

Это мой код

#import "FirstViewController.h" 
#import "LocationObject.h" 
#define THE_SPAN 0.01f; 
@interface FirstViewController() 

@property (weak, nonatomic) IBOutlet MKMapView *mapView; 
@property (weak, nonatomic) IBOutlet UITextField *latitude_value; 
@property (weak, nonatomic) IBOutlet UITextField *longitude_value; 
@property (copy, nonatomic) NSString *title_value; 
@property(nonatomic,assign) CLLocationCoordinate2D myCoordinate; 
@property(nonatomic,copy) NSMutableArray *locations; 
@property(nonatomic,retain) MKPointAnnotation * myAnnotation; 
@property (readwrite) int tag; 
@property(retain) MKPinAnnotationView *pinView; 
@property (weak, nonatomic) IBOutlet UITextView *title_para; 
@property(assign) CLLocationCoordinate2D *coordsArray; 
@property(nonatomic,assign) MKPolyline * routeLine; 

@end 

@implementation FirstViewController 
@synthesize latitude_value; 
@synthesize longitude_value; 
@synthesize title_value; 
@synthesize myCoordinate; 
@synthesize mapView; 
@synthesize locations; 
@synthesize myAnnotation; 
@synthesize tag; 
@synthesize pinView; 
@synthesize title_para; 
@synthesize title; 
@synthesize coordsArray; 
@synthesize routeLine; 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 
} 

- (void)viewDidUnload 
{ 
[self setMapView:nil]; 
[self setLatitude_value:nil]; 
[self setLongitude_value:nil]; 
[self setLatitude_value:nil]; 
[self setLongitude_value:nil]; 
[self setTitle_value:nil]; 
[self setTitle_para:nil]; 
[super viewDidUnload]; 
// Release any retained subviews of the main view. 
} 

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay { 

MKPolylineView *polyLineView = [[MKPolylineView alloc] initWithPolyline:routeLine]; 
polyLineView.fillColor = [UIColor blueColor]; 
polyLineView.strokeColor = [UIColor redColor]; 
polyLineView.lineWidth = 2; 
return polyLineView; 
} 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} 

// карта вид: область над аннотациями

#pragma mark map view delegate methods 

-(void) mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation 
{ 
//map region and center location 
MKCoordinateRegion myRegion; 
CLLocationCoordinate2D center; 
center.latitude=13.040223; 
center.longitude=80.240995; 

MKCoordinateSpan span; 
span.latitudeDelta=THE_SPAN; 
span.longitudeDelta=THE_SPAN; 

myRegion=MKCoordinateRegionMake(center, span); 
MKCoordinateRegion adjusted_region=[self.mapView regionThatFits:myRegion]; 

[self.mapView setRegion:adjusted_region animated:YES]; 
locations=[[NSMutableArray alloc]init]; 

//first point 

CLLocationCoordinate2D first; 
first.latitude=13.040202; 
first.longitude=80.24298; 

myAnnotation = [[MKPointAnnotation alloc]init]; 
myAnnotation.coordinate=first; 
[email protected]"Wifin Technology"; 
[email protected]"Globus"; 
[locations addObject:myAnnotation]; 

//second point 

CLLocationCoordinate2D second; 
second.latitude=13.0406527; 
second.longitude=80.2437427; 

myAnnotation= [[MKPointAnnotation alloc]init]; 
myAnnotation.coordinate=second; 
[email protected]"The Residency Towers"; 
[email protected]"Chennai"; 
[locations addObject:myAnnotation]; 

//third point 

CLLocationCoordinate2D third; 
third.latitude=13.040202; 
third.longitude=80.240191; 
myAnnotation= [[MKPointAnnotation alloc]init]; 

myAnnotation.coordinate=third; 
[email protected]"Rado Cool Zone"; 
[email protected]"Chennai"; 
[locations addObject:myAnnotation]; 


[self.mapView addAnnotations:locations]; 

title_para.text=[[NSString alloc]initWithString:@"The position displayed is Pondy Bazaar"]; 

coordsArray = malloc(sizeof(CLLocationCoordinate2D) * locations.count); 

int i = 0; 
for (CLLocation *loc in locations) { 
    coordsArray[i] = loc.coordinate; 
    i++; 
} 

routeLine = [MKPolyline polylineWithCoordinates:coordsArray 
                 count:locations.count]; 

[mapView addOverlay:routeLine];  


self.longitude_value.text=[NSString stringWithFormat:@"%f",center.longitude]; 
self.latitude_value.text=[NSString stringWithFormat:@"%f",center.latitude]; 
} 

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 
{ 
float latitude = [[view annotation ] coordinate].latitude; 
float longitude = [[view annotation ] coordinate].longitude; 
title_value=[[view annotation] title]; 
NSString * subtitle_val =[[view annotation] subtitle]; 
title_para.text=[NSString stringWithFormat:@"%@, %@",title_value,subtitle_val]; 
latitude_value.text=[NSString stringWithFormat:@"%f",latitude]; 
longitude_value.text=[NSString stringWithFormat:@"%f",longitude]; 
} 

// Аннотация вид: иконки

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 

pinView = nil; 

    static NSString *identifier = @"Wifintech"; 
    pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier]; 
    if (pinView == nil) 
     pinView = [[MKPinAnnotationView alloc] 
        initWithAnnotation:annotation reuseIdentifier:identifier]; 

     if([[annotation title] isEqualToString:@"Wifin Technology"]) 
     { 
      pinView.image = [UIImage imageNamed:@"car-side.png"]; 
      pinView.canShowCallout = YES; 

     } 
     else if ([[annotation title] isEqualToString:@"The Residency Towers"]) 
     { 
     pinView.image=[UIImage imageNamed:@"lorry-side.png"]; 
     pinView.canShowCallout = YES; 
     } 
     else if([[annotation title] isEqualToString:@"Rado Cool Zone"]) 
     { 
      //pinView.pinColor = MKPinAnnotationColorGreen; 
      pinView.canShowCallout = YES; 
      //pinView.animatesDrop = YES; 
      pinView.image = [UIImage imageNamed:@"car.png"];  
      } 
     else { 
      NSLog(@"Nothing"); 
     } 
return pinView; 

} 
@end 
+0

@joride, я дал полное кодирование – chandru

+0

Да, я его видел. Я добавил еще один ответ, по какой-то причине он появляется над вашим полным кодом. – Joride

1

Попробуйте возвращающую MKAnnotationView вместо MKPinAnnotationView от

-mapView:viewForAnnotation: 

Скорее всего, подкласс отменяет некоторый метод, который отслеживает выбранное состояние представления и корректирует изображение. Я подозреваю, что это не так, если вы используете MKAnnotationView.

Смежные вопросы