如何将 MKMapView(或任何 UIView)裁剪为自定义形状?

Posted

技术标签:

【中文标题】如何将 MKMapView(或任何 UIView)裁剪为自定义形状?【英文标题】:How do I crop a MKMapView (or any UIView) into a custom shape? 【发布时间】:2015-02-01 15:11:19 【问题描述】:

我正在尝试通过以下方式调整 MKMapView 的大小:

元素应该能够出现在顶部圆弧的后面,所以看起来视图不是方形的。我知道 CALayer 应该可以做到这一点,但也许有人以前做过?

【问题讨论】:

【参考方案1】:

如果您将 MKMapView 放在 UIView 中,然后对其应用掩码,这应该是很有可能的。

这是一个非常(!)的基本示例:

我所做的只是将我的地图放在一个名为“mapContainer”的 UIView 中,并使用它为其添加了一个遮罩:

-(void)viewDidAppear:(BOOL)animated

    [super viewDidAppear:animated];

    CGRect rect = CGRectInset(self.view.frame, 70, 70);
    UIView* newView = [[UIView alloc] initWithFrame:rect];
    newView.layer.cornerRadius = 55.0;
    newView.backgroundColor = [UIColor redColor];

    self.mapContainer.layer.mask = newView.layer;

你可以给它加个边框...

..还有几行...

-(void)viewDidAppear:(BOOL)animated

    [super viewDidAppear:animated];

    CGRect rect = CGRectInset(self.view.frame, 70, 70);
    UIView* newView = [[UIView alloc] initWithFrame:rect];
    newView.layer.cornerRadius = 55.0;
    newView.backgroundColor = [UIColor redColor];

    UIView* borderView = [[UIView alloc] initWithFrame:rect];
    borderView.backgroundColor = [UIColor clearColor];
    borderView.layer.cornerRadius = 55.0;
    borderView.layer.borderWidth = 3.0;
    borderView.layer.borderColor = [[UIColor redColor] CGColor];
    [self.mapContainer addSubview:borderView];
    [self.mapContainer bringSubviewToFront:borderView];

    self.mapContainer.layer.mask = newView.layer;

我希望这会为您指明正确的方向。

与 Apple 地图不同。

;-)

【讨论】:

以上是关于如何将 MKMapView(或任何 UIView)裁剪为自定义形状?的主要内容,如果未能解决你的问题,请参考以下文章

在 UIView(不是 MKMapView)中使用 lat/long 的最佳实践

将 MKMapView 移动到相对于 superview 的特定位置

使用 UIView 作为 MKMapView 子视图来绘制路线

UIView 内的 MKMapView 框架没有改变

Swift:如何将 MapView 放入 UIView(?)

使用 MKMapView 和可触摸的子视图创建视图