将透视变换应用于MKMapView

时间:2012-02-06 14:13:44

标签: ios5 mapkit catransform3d

我正在尝试将透视转换应用于MKMapView。我正在关注this Stackoverflow question的示例,因此我的代码看起来像这样(插入到视图控制器的viewDidLoad方法中):

MKMapView *map = [[MKMapView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 480.0)];
[self.view addSubview:map];

CLLocationDistance distance = 2000000.0;
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(52.5, 13.4);
[map setRegion:MKCoordinateRegionMakeWithDistance(coordinate, distance, distance)];

CATransform3D transform = CATransform3DIdentity;
transform.m34 = 1.0 / -1200.0;
transform = CATransform3DRotate(transform, M_PI_4, 1.0, 0.0, 0.0);
map.layer.transform = transform;

这段代码,正如所写,很好地工作,我得到了一个应用了透视的欧洲地图。问题是,如果我减少distance变量以获得更近的视图,或者甚至从这个工作初始状态放大,地图不会正确放大,它只是缩放地图,就像在缩放时一样 - 出国。另一方面,如果我没有设置m34的{​​{1}}字段,即只是在没有透视的情况下倾斜地图,它就可以正常工作。

有没有办法获得带透视的街道地图?

1 个答案:

答案 0 :(得分:2)

我设法通过添加

来获得透视效果
[map.layer setShouldRasterize:YES];

显然,在应用透视时直接渲染地图内容存在问题。