【问题标题】:How to add a drop shadow to an MKMapView without disabling clipsToBounds如何在不禁用 clipsToBounds 的情况下向 MKMapView 添加阴影
【发布时间】:2012-07-12 05:52:14
【问题描述】:

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

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

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;

【问题讨论】:

    标签: iphone ios mkmapview calayer


    【解决方案1】:

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

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

    【讨论】:

    • 完美运行,虽然目前我的视图控制器的viewDidLoad 函数中有所有这些代码,有没有更好的地方放它?
    • viewDidLoad 可能还不错。如果它变得荒谬,您可能会考虑将事物子类化或添加更多控制器。这真的取决于其他事情。
    【解决方案2】:

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

    更多信息在这里:UIView Round Corners with Shadow

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      • 2014-07-08
      • 2012-11-08
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多