如何在不禁用clipsToBounds的情况下向MKMapView添加投影

时间:2012-07-12 05:52:15

标签: iphone ios mkmapview calayer

当我尝试向MKMapView的图层添加投影时,我遇到了问题,为了使阴影可见,我必须将视图的clipsToBounds属性设置为false 。但是,这样做会导致地图图块在视图边界外绘制,与阴影重叠并切割视图的某些部分。结果看起来像这样:

A screenshot of the bug taken in the iPhone 5.1 Simulator http://f.cl.ly/items/0n2Y2N1p302J2W3I1S3P/Screen%20Shot%202012-07-12%20at%203.49.39%20PM.png

我想知道是否有一种方法可以在不禁用边界裁剪的情况下绘制阴影,或者在没有这种丑陋的视觉错误的情况下显示投影。我设置投影的代码如下所示:

self.mapView.layer.borderWidth = 5.0;
self.mapView.layer.borderColor = [[UIColor whiteColor] CGColor];
self.mapView.layer.shadowOffset = CGSizeMake(0.0, 0.0);
self.mapView.layer.shadowColor = [[UIColor blackColor] CGColor];
self.mapView.layer.shadowRadius = 5.0;
self.mapView.layer.shadowOpacity = 0.2;
self.mapView.clipsToBounds = NO;

2 个答案:

答案 0 :(得分:4)

由于该图层归MKMapView所有,因此自己触摸它通常不是一个好主意。 (这种情况可能会在以后的操作系统版本中以奇怪的方式破解,并以不可预测的方式运行(看看它是否适用于新的iOS 6 3D地图会很有趣)。在OS X上支持视图,你根本不应该直接触摸图层(除非它是图层托管视图,但这是一个不同的讨论))

要获得下方的阴影,只需创建自己的新CALayer,并在地图下方放置阴影。或者将MKMapView嵌套为您自己的UIView的子视图,并将阴影添加到您的视图中(不需要裁剪)。

答案 1 :(得分:2)

您必须创建两个视图,一个用于阴影,另一个用于圆角。

此处有更多信息:UIView Round Corners with Shadow