我正在使用MKMapView在地图上显示一些资产。这些资产可以集群。当用户点击集群时,我会根据集群中资产的位置来计算MKCoordinateRegion,然后将地图放大:

- (void)collectionView:(UICollectionView *)cv didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    NSIndexSet *indexSet = self.aggregates[indexPath.section];
    NSArray *assets = [self.assetsFetchResults objectsAtIndexes:indexSet];

    if(assets.count == 1){
        [self performSegueWithIdentifier:VWWSegueCollectionToFull sender:indexPath];
    } else {
        MKCoordinateRegion region = [self calculateRegionFromAssets:assets];
        NSLog(@"Current mapView.region: %f,%f", self.mapView.region.span.latitudeDelta, self.mapView.region.span.longitudeDelta);
        NSLog(@"Calculated map  region: %f,%f", region.span.latitudeDelta, region.span.longitudeDelta);
        [self.mapView setRegion:region animated:YES];
    }
}

即使我的函数正确计算了区域,地图也只会放大到特定级别。用户可以毫无问题地捏和放大,但这不会以编程方式让我更近。最小跨度似乎以编程方式约为0.008x0.008。

这是我的代码在第一次缩小用户然后点击群集时输出的内容:
2014-07-01 12:26:46.123 [6090:1074617] Current mapView.region: 0.407665,0.412912
2014-07-01 12:26:46.124 [6090:1074617] Calculated map  region: 0.000750,0.000755

然后,代码无法放大到0.000750、0.000750的范围。
2014-07-01 12:26:50.330 [6090:1074617] Current mapView.region: 0.008123,0.008240
2014-07-01 12:26:50.331 [6090:1074617] Calculated map  region: 0.000750,0.000755

再试一次,一样。
2014-07-01 12:26:53.349 [6090:1074617] Current mapView.region: 0.008123,0.008240
2014-07-01 12:26:53.350 [6090:1074617] Calculated map  region: 0.000750,0.000755

我慢慢增加了函数输出的最小跨度,但这并不重要。地图只会近距离放大。

如果我找不到使它起作用的方法,我将介绍设置MKCamera

最佳答案

它已经被其他人回答,但是很难在SO上找到。使用MKMapCamera可以缩小到100英尺或更小。

MKMapCamera *myCamera = [MKMapCamera cameraLookingAtCenterCoordinate:newLocation
                                                 fromEyeCoordinate:newLocation eyeAltitude:50];
[_appleMap setCamera:myCamera animated:false];

10-06 04:12