2012-11-26 50 views
0

我正在研究一个使用MapKit类Mkannotation和MKAnnotationView(当然都是子类)的应用程序。如何为MKAnnotationViews设置多个图像?

我的问题是,我怎么能把多个FGAnnotationViews在我的地图上(约5)都有不同的图像?

我知道我可以创建5种不同的新的类和初始化了一个匹配的,但我想,也许有把if语句的

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

函数内的方法,像

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { 
MKAnnotationView *annView = nil; 

if (annotation == myRestaurantAnnotation) { 

    FGAnnotationView *fgAnnView = (FGAnnotationView*)[self.mapView dequeueReusableAnnotationViewWithIdentifier:@"Location"]; 
    fgAnnView = [[FGAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Location"]; 
} 
return annView; 
} 

有人吗?

+0

我没有看到与Xcode的关系。我错过了什么吗? – 2012-11-26 21:28:15

+0

对不起,Obj-C肯定会做得更好 –

+0

,谢谢! – 2012-11-26 21:33:29

回答

2

你快到了。试试这个

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { 
    MKAnnotationView *annView = nil; 

    FGAnnotationView *fgAnnView = (FGAnnotationView*)[self.mapView dequeueReusableAnnotationViewWithIdentifier:@"Location"]; 

    if (annotation == myRestaurantAnnotation) { 
     fgAnnView.image = //MAGIC GOES HERE//; 
    } else if (annotation == myBankAnnotation) { 
     fgAnnView.image = //MAGIC GOES HERE//; 
    } 
    return fgAnnView; 
} 

如果你是让地图引起用户的位置,你应该检查类注释,并确保它不MKUserLocation。如果是,那么你返回零。如果您有多个每个注释类的实例,您可以使用该类来确定要设置的图像而不是匹配对象本身,如下所示:

if ([annotation isKindOfClass:[MKUserLocation class]]) { 
    return nil; 
} else if ([annotation isKindOfClass:[FGRestaurantAnnotation class]]) { 
    fgAnnView.image = //YOUR IMAGE CODE// 
} 
+0

这听起来对我来说是合乎逻辑的,但我仍然收到错误'使用未声明的标识符 - myAnnotation - '或'收件人FGRestaturantAnnotation为类消息是第二种方法的前向声明'... –

+0

你有一个名为“myAnnotation”的变量,如果不是,那么你不能在==比较中使用它。如果你的FGRestaturantAnnotation类没有包含/导入你的视图控制器的顶部,那么你可以在代码中引用它。 – Craig

+0

啊,好吧,我忘了那个,现在就开始工作!谢谢 –

相关问题