在xcode中添加不同的图像到不同的注释视图
我试图添加不同的图像到不同的注释视图,换句话说,我想要一个独特的图片来对应每个独特的引脚。 这是我正在尝试的:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { NSLog(@"welcome into the map view annotation"); // if it's the user location, just return nil. if ([annotation isKindOfClass:[MKUserLocation class]]) return nil; // try to dequeue an existing pin view first static NSString* AnnotationIdentifier = @"AnnotationIdentifier"; MKPinAnnotationView* pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier] autorelease]; pinView.animatesDrop=YES; pinView.canShowCallout=YES; pinView.pinColor=MKPinAnnotationColorPurple; UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; [rightButton setTitle:annotation.title forState:UIControlStateNormal]; [rightButton addTarget:self action:@selector(showDetails:) forControlEvents:UIControlEventTouchUpInside]; pinView.rightCalloutAccessoryView = rightButton; if (CLLocationCoordinate2D == theCoordinate1) { UIImageView *profileIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Jeff.png"]]; pinView.leftCalloutAccessoryView = profileIconView; [profileIconView release]; }else if(CLLocationCoordinate2D = theCoordinate2) { UIImageView *profileIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Pierce.png"]]; pinView.leftCalloutAccessoryView = profileIconView; [profileIconView release]; }
我正在写我所在的行的错误
if (CLLocationCoordinate2D == theCoordinate1) {
我不确定错在哪里,我也不能找出另一种方法来识别个人注释。 任何帮助是极大的赞赏!!
该行提供了一个错误,因为CLLocationCoordinate2D
是一种结构,并且theCoordinate1
是我假设的CLLocationCoordinate2D
types的variables。 你不能比较这两个。
你要做的是将请求视图的当前注释的坐标与坐标1中的坐标进行theCoordinate1
。 要做到这一点,如果你必须的话,你需要这样的东西:
if ((annotation.coordinate.latitude == theCoordinate1.latitude) && (annotation.coordinate.longitude == theCoordinate1.longitude)) {
但是,我不build议比较浮点数,即使它“有效”有时。 如果您必须比较坐标,请使用CLLocation的distanceFromLocation:
方法,并查看两者之间的距离是否低于某个阈值,如10.0米。
另一种检查注释是否是你要找的注释的方法是保留对注释本身的引用(你传递给addAnnotation:
方法),然后你可以做if (annotation == theAnnotation1)
。
如果你不想保留对注释的引用,你也可以检查注释的标题是否是你正在查找的标题( if ([annotation.title isEqualToString:@"Jeff"])
)。
最好的方法是添加一个自定义属性(理想的是一个int)到一个自定义的注释类,并检查在viewForAnnotation。
其他一些无关的事情:
- 而不是做addTarget,在地图视图自己的
calloutAccessoryControlTapped
委托方法中处理button按下,它将给予注释的引用(请参阅如何查找哪些注释发送showDetails? )。 - 你有一个评论“出列”,但你没有这样做。 build议在viewForAnnotation中使用
dequeueReusableAnnotationViewWithIdentifier
来重新使用视图(例如,参见使用MKPinAnnotationView的EXC_BAD_ACCESS )。