gpt4 book ai didi

ios - viewForAnnotation 没有被调用

转载 作者:行者123 更新时间:2023-11-29 04:03:57 24 4
gpt4 key购买 nike

扫描了所有类似的问题并尝试了所有可能的解决方案后,我仍然找不到适合我的情况的解决方案。我尝试在我的 MapView 上放置多个图钉,但似乎无法正常添加我的图钉。我在 viewDidLoad 方法中启动了一个 NSTimer,以便每 5 秒就会在 map 上放置一些更新的图钉。我添加了调试信息,发现问题是 viewForAnnotation 方法没有被调用。(我已经通过调用 [_map setDelegate:self] 设置了委托(delegate))

我的代码如下:

    - (void)viewDidLoad
{
[super viewDidLoad];
_map = [[MKMapView alloc] initWithFrame:[[self view] frame]];
[_map setDelegate:self];

CLLocationCoordinate2D startLocation;
startLocation.latitude = [startLat floatValue];
startLocation.longitude = [startLong floatValue];
MKCoordinateSpan span = MKCoordinateSpanMake(0.002, 0.002);
MKCoordinateRegion region = MKCoordinateRegionMake(startLocation, span);
[_map setRegion:region];

[[self view] addSubview:_map];

[self getPlacesForLocation:[_map centerCoordinate]];

NSTimer *currentTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(theActionMethod:) userInfo:nil repeats:YES];
[currentTimer fire];
}

getPlacesForLocationMethod:

-(void)getPlacesForLocation:(CLLocationCoordinate2D)location
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^
{

/* get data from the website
** get the geo information and put them in the MapPin struct
*/

[self putPinsOnMap];
}
}

putPinsOnMap:

-(void)putPinsOnMap
{

for(Pinfo *iter in [_PinfoArray copy])
{
MapPin *pin = [[MapPin alloc] init];
[pin setTitle:[iter from_user_name]];
[pin setSubtitle:[iter text]];
[pin setCoordinate:[iter location]];

//NSLog(@"The coordinate is %f %f", [pin coordinate].latitude, [pin coordinate].longitude);

[_map addAnnotation:pin];

/****************************************/

NSLog(@"Try to put the pin on Map");
/****************************************/
}
}

这是我的 MapPin.h 的内容:

@interface MapPin : NSObject<MKAnnotation>

@property (nonatomic, copy) NSString *title, *subtitle;
@property (nonatomic) CLLocationCoordinate2D coordinate;

@end

如果我留在原地,那么每次调用(void)putPinsOnMap时,它都会打印“尝试在 map 上放置图钉”,但viewForAnnotation 方法没有被调用(我还在那里添加了调试信息,但没有打印任何信息)。只有几次,如果我缩小到很大程度,有时会调用方法viewForAnnotation

最佳答案

您说您向 viewForAnnotation 添加了调试信息,但您没有子类化 MKMapView 来覆盖 viewForAnnotation 方法(或者至少,您正在分配一个 MKMapView,而不是任何子类)。我认为您正在寻找委托(delegate)方法:

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

如果您在 View Controller (您正在将其作为 MKMapView 的委托(delegate))中实现该方法,您可能会获得有用的信息。

如果mapView:viewForAnnotation:仍然没有被调用,除非你缩小了很多,那么你可能错误地放置了你的注释,它们只是在地球上的其他地方,而不是你最初在屏幕上显示的地方。

关于ios - viewForAnnotation 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15487298/

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