我正在尝试缩放到随机注释并自动打开气泡。
我将注释固定在 viewDidLoad 中,如下所示:
...arrays...
for (int i=0; i<22; i++){
MKPointAnnotation *annot = [[MKPointAnnotation alloc] init];
annot.title = [wineryName objectAtIndex:i];
annot.subtitle = [wineryAddress objectAtIndex:i];
annot.coordinate = CLLocationCoordinate2DMake([[lat objectAtIndex:i]doubleValue], [[lon objectAtIndex:i]doubleValue]);
[mapView setCenterCoordinate:annot.coordinate animated:YES];
[mapView addAnnotation:annot];
然后我将气泡设置如下:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;
//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=MKPinAnnotationColorRed;
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0, 0, 35, 35);
button.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
[button setImage:[UIImage imageNamed:@"RightArrow.png"] forState:UIControlStateNormal];
[button addTarget:self action:@selector(showDetails:) forControlEvents:UIControlEventTouchUpInside];
pinView.rightCalloutAccessoryView = button;
...arrays...
for (int i = 0; i < 22; i++) {
if ([wineryTitle[i] isEqualToString:[annotation title]]) {
UIImageView *profileIconView = [[UIImageView alloc] init];
profileIconView.frame = CGRectMake(0, 0, 40, 33);
profileIconView.image = [UIImage imageNamed:wineryImage[i]];
pinView.leftCalloutAccessoryView = profileIconView;
[profileIconView release];
break;
}
}
return pinView;
}
然后我试图放大到一个随机位置,如下所示:
- (void)zoomToUserLocation:(MKUserLocation *)userLocation
{
if (!userLocation)
return;
MKCoordinateRegion region;
//zoom to random pin when page loads
int randomNumber = rand() % 22;
switch (randomNumber) {
case 1:
region.center = CLLocationCoordinate2DMake(34.642109, -120.440292);
[self.mapView selectAnnotation:[self.mapView.annotations objectAtIndex:0] animated:TRUE];
break;
case 2:
region.center = CLLocationCoordinate2DMake(34.667408, -120.334781);
[self.mapView selectAnnotation:[self.mapView.annotations objectAtIndex:1] animated:TRUE];
break;
case 3:
...etc
}
region.span = MKCoordinateSpanMake(5.0, 5.0);
region = [self.mapView regionThatFits:region];
[self.mapView setRegion:region animated:YES];
}
所有这些工作<除了:在 zoomToUserLocation 方法中,地图缩放到一个位置,然后显示另一个位置的气泡。似乎随机操作员正在分别随机选择一个位置和一个气泡。有谁知道如何解决这个问题,以便气泡自动出现在随机选择的同一位置?