В контроллере моего просмотра отображаются аннотации Map Kit.
_mapVC = [[CollectionMapViewController alloc] init];
mapVC.collectedLeafArray = [collectionFetchedResultsController fetchedObjects];
mapVC.canShowCallout = YES;
mapVC.delegate = self;
[mapVC layoutMapView];
[self addChildViewController:mapVC];
[self.view insertSubview:mapVC.view belowSubview:_userCollectionSortMenu.view];
[mapVC didMoveToParentViewController:self];
Я точно так же настроил свой дочерний контроллер представления в моем контроле просмотра заметок. Однако они не отображаются.
_mapVC = [[CollectionMapViewController alloc] init];
_mapVC.collectedLeafArray = [NSArray arrayWithObject:_collectedLeaf];
_mapVC.delegate = self;
_mapVC.canShowCallout = NO;
[_mapVC layoutMapView];
[self addChildViewController:_mapVC];
[_scrollView addSubview:_mapVC.view];
[_mapVC didMoveToParentViewController:self];
Я знаю, что собранный лист не равен нулю, потому что я проверяю широту в методе CollectionMapViewController
, который устанавливает аннотации:
- (void)layoutMapView
{
NSMutableArray* leavesWithValidGeotag = [[NSMutableArray alloc] initWithCapacity:[collectedLeafArray count]];
for (CollectedLeaf* collectedLeaf in collectedLeafArray)
{
NSLog(@"latitude: %@", collectedLeaf.latitude);
if ( ![collectedLeaf.latitude isEqualToString:kGeoLocationNotAvailable] )
{
[leavesWithValidGeotag addObject:collectedLeaf];
LeafAnnotation* annotation = [[LeafAnnotation alloc] initWithLeaf:collectedLeaf];
[mapView addAnnotation:annotation];
[annotation release];
}
}
//// Adjust the region
if([leavesWithValidGeotag count] > 1)
{
NSArray* westEastSort = [leavesWithValidGeotag sortedArrayUsingSelector:@selector(longitudeCompare:)];
CollectedLeaf* eastMostLeaf = [westEastSort objectAtIndex:0];
CollectedLeaf* westMostLeaf = [westEastSort lastObject];
NSArray* southNorthSort = [leavesWithValidGeotag sortedArrayUsingSelector:@selector(latitudeCompare:)];
CollectedLeaf* southMostLeaf = [southNorthSort objectAtIndex:0];
CollectedLeaf* northMostLeaf = [southNorthSort lastObject];
CLLocationCoordinate2D center;
center.longitude = ([westMostLeaf.longitude doubleValue] + [eastMostLeaf.longitude doubleValue]) / 2.0f;
center.latitude = ([southMostLeaf.latitude doubleValue] + [northMostLeaf.latitude doubleValue]) / 2.0f;
MKCoordinateSpan span = MKCoordinateSpanMake(1.5 * fabs([northMostLeaf.latitude doubleValue] - [southMostLeaf.latitude doubleValue]),
1.5 * fabs([westMostLeaf.longitude doubleValue] - [eastMostLeaf.longitude doubleValue]));
if ( span.latitudeDelta < kMinimumSpan )
{
span.latitudeDelta = kMinimumSpan;
}
if ( span.longitudeDelta < kMinimumSpan )
{
span.longitudeDelta = kMinimumSpan;
}
MKCoordinateRegion region = MKCoordinateRegionMake(center, span);
[mapView setRegion:region];
}
else if([leavesWithValidGeotag count] == 1)
{
CollectedLeaf* theLeaf = [leavesWithValidGeotag objectAtIndex:0];
CLLocationCoordinate2D center;
center.longitude = [theLeaf.longitude doubleValue];
center.latitude = [theLeaf.latitude doubleValue];
MKCoordinateSpan span = MKCoordinateSpanMake(kMinimumSpan, kMinimumSpan);
MKCoordinateRegion region = MKCoordinateRegionMake(center, span);
[mapView setRegion:region];
}
[leavesWithValidGeotag release];
}