gpt4 book ai didi

ios - map 中的随机 MKPointAnnotation

转载 作者:行者123 更新时间:2023-11-28 20:09:20 25 4
gpt4 key购买 nike

在我的项目中,我用这些信息填充我的 map

for  (int i = 0; i<arrayResults.count; i++){

object = [arrayResults objectAtIndex:i];

if ([[object iden]intValue] == 1) {

type = @"type_one";

CLLocationCoordinate2D annotationCoord = CLLocationCoordinate2DMake([[[object coord]objectForKey:@"latitude"] floatValue], [[[object coord]objectForKey:@"longitude"] floatValue]);

MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init];
annotationPoint.coordinate = annotationCoord;
annotationPoint.title = [NSString stringWithFormat:@"%@",[object nome_obj]];
annotationPoint.subtitle = [NSString stringWithFormat:@"%@",[object address]];
[map addAnnotation:annotationPoint];
}

else if ([[object iden]intValue] == 2) {

type = @"type_two";

CLLocationCoordinate2D annotationCoord = CLLocationCoordinate2DMake([[[object coord]objectForKey:@"latitude"] floatValue], [[[object coord]objectForKey:@"longitude"] floatValue]);

MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init];
annotationPoint.coordinate = annotationCoord;
annotationPoint.title = [NSString stringWithFormat:@"%@",[object nome_obj]];
annotationPoint.subtitle = [NSString stringWithFormat:@"%@",[object address]];
[map addAnnotation:annotationPoint];
}

else if ([[object iden]intValue] == 3) {

type = @"type_three";

CLLocationCoordinate2D annotationCoord = CLLocationCoordinate2DMake([[[object coord]objectForKey:@"latitude"] floatValue], [[[object coord]objectForKey:@"longitude"] floatValue]);

MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init];
annotationPoint.coordinate = annotationCoord;
annotationPoint.title = [NSString stringWithFormat:@"%@",[object nome_obj]];
annotationPoint.subtitle = [NSString stringWithFormat:@"%@",[object address]];
[map addAnnotation:annotationPoint];
}

else if ([[object iden]intValue] == 4) {

type = @"type_four";

CLLocationCoordinate2D annotationCoord = CLLocationCoordinate2DMake([[[object coord]objectForKey:@"latitude"] floatValue], [[[object coord]objectForKey:@"longitude"] floatValue]);

MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init];
annotationPoint.coordinate = annotationCoord;
annotationPoint.title = [NSString stringWithFormat:@"%@",[object nome_obj]];
annotationPoint.subtitle = [NSString stringWithFormat:@"%@",[object address]];
[map addAnnotation:annotationPoint];
}

这是我在 map 上添加的四种对象

当我进入这个方法时

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

MKAnnotationView *view = nil;
if (annotation != mapView.userLocation) {

if ([[[arrayResults objectAtIndex:countPoint]iden]intValue] == 1){

view = [mapView dequeueReusableAnnotationViewWithIdentifier:@"type_one"];
if (!view) {

view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"type_one"];
view.canShowCallout = YES;

UIButton* aButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[aButton addTarget:self action:@selector(open:) forControlEvents:UIControlEventTouchUpInside];
[aButton setTag:countPoint+100];
view.rightCalloutAccessoryView = aButton;

view.image = [UIImage imageNamed:@"type_one.png"];
}

}

else if ([[[arrayResults objectAtIndex:countPoint]iden]intValue] == 2){

view = [mapView dequeueReusableAnnotationViewWithIdentifier:@"type_two"];
if (!view) {

view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"type_two"];

view.canShowCallout = YES;

UIButton* aButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[aButton addTarget:self action:@selector(open:) forControlEvents:UIControlEventTouchUpInside];
[aButton setTag:countPoint+100];
view.rightCalloutAccessoryView = aButton;

view.image = [UIImage imageNamed:@"type_two.png"];
}
}
else if ([[[arrayResults objectAtIndex:countPoint]iden]intValue] == 3){


view = [mapView dequeueReusableAnnotationViewWithIdentifier:@"type_three"];
if (!view) {

view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"type_three"];

view.canShowCallout = YES;

UIButton* aButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[aButton addTarget:self action:@selector(open:) forControlEvents:UIControlEventTouchUpInside];
[aButton setTag:countPoint+100];
view.rightCalloutAccessoryView = aButton;

view.image = [UIImage imageNamed:@"type_three.png"];
}

}
else if ([[[arrayResults objectAtIndex:countPoint]iden]intValue] == 4){

view = [mapView dequeueReusableAnnotationViewWithIdentifier:@"type_four"];
if (!view) {

view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"type_four"];

view.canShowCallout = YES;

UIButton* aButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[aButton addTarget:self action:@selector(openScheda:) forControlEvents:UIControlEventTouchUpInside];
[aButton setTag:countPoint+100];
view.rightCalloutAccessoryView = aButton;

view.image = [UIImage imageNamed:@"type_four.png"];

}
}
countPoint++;
}

问题是标记的类型与数组元素不对应...但我不明白。也就是说,如果标记有图像“type_one”,在弹出窗口中它显示 type_four 的“title”……它不对应

最佳答案

您的注释需要“知道”它是什么类型,以便您可以在 viewForAnnotation 中创建正确类型的 View 。通过子类化 MKPointAnnotation 来实现,向其添加 NSInteger 值以存储数组索引。

参见 MKPointAnnotation add extra property ,但您将添加一个名为 index 的 NSInteger 属性。

创建注释时,设置此属性:

for  (int i = 0; i<arrayResults.count; i++)
{
object = [arrayResults objectAtIndex:i];

CLLocationCoordinate2D annotationCoord = CLLocationCoordinate2DMake([[[object coord]objectForKey:@"latitude"] floatValue], [[[object coord]objectForKey:@"longitude"] floatValue]);

// MKMyPointAnnotation is your MKPointAnnotation subclass
MKMyPointAnnotation *annotationPoint = [[MKMyPointAnnotation alloc] init];
annotationPoint.coordinate = annotationCoord;
annotationPoint.title = [NSString stringWithFormat:@"%@",[object nome_obj]];
annotationPoint.subtitle = [NSString stringWithFormat:@"%@",[object address]];

annotationPoint.index = i; // store the index

[map addAnnotation:annotationPoint];
}

然后在您的 viewForAnnotation 中,将注释转换为您的子类,然后取消引用该类型:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
{
MKMyPointAnnotation *myAnnotation = (MKMyPointAnnotation *)annotation;
object = [arrayResults objectAtIndex:myAnnotation.index]; // <-- your index property

switch ([[object iden] intValue])
{
case 1: // type one
.
.
.

}

.
.
.
}

关于ios - map 中的随机 MKPointAnnotation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20858866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com