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

Ios 如何将MKMapView(或任何UIView)裁剪成自定义形状?,ios,uiview,calayer,quartz-graphics,Ios,Uiview,Calayer,Quartz Graphics,我尝试按以下方式调整MKMapView的大小: 元素应该能够显示在顶部圆弧的后面,因此视图似乎不是方形的。我知道这在CALayer中应该是可能的,但也许有人以前做过?如果将MKMapView放在UIView中,然后对其应用掩码,这应该是非常可能的 下面是一个非常(!)的基本示例: 我所做的就是将我的地图放在一个名为“mapContainer”的UIView中,并使用以下方法向其添加一个掩码: -(void)viewDidAppear:(BOOL)animated { [super v

我尝试按以下方式调整MKMapView的大小:


元素应该能够显示在顶部圆弧的后面,因此视图似乎不是方形的。我知道这在CALayer中应该是可能的,但也许有人以前做过?

如果将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;
}
我希望这为你指明了正确的方向

与苹果地图不同

;-)