如何用另一个 UIView 的矩形切割 UIView 的顶角

Posted

技术标签:

【中文标题】如何用另一个 UIView 的矩形切割 UIView 的顶角【英文标题】:How to cut the top corner of UIView with a rect of another UIView 【发布时间】:2018-08-18 10:03:02 【问题描述】:

如何在特定点用另一个视图的矩形切割视图?

这是两个视图

    UIImageView 正在显示图像。 具有显示用户状态的背景颜色的 UIView。

注意:两个视图的高度和宽度都是统一的。

一个可行的例子会很有帮助。

谢谢

【问题讨论】:

你只是将其他视图放在图像视图的一侧。 我需要如图所示的右上角的切割效果。 是的,对象应该有您需要的边框类型。 我不需要边框我需要这种切割效果,因为背景可以是任何颜色,并且需要通过该切割可见 【参考方案1】:

例子:

 -(void) viewDidAppear:(BOOL)animated 
    self.view.backgroundColor = [UIColor blueColor];
    UIImageView* yourView = [[UIImageView alloc] initWithFrame:CGRectMake(200, 200, 200, 200)];
    yourView.center = self.view.center;
    yourView.image = [UIImage imageNamed:@"testImg"];

    yourView.layer.cornerRadius = 100;
    yourView.clipsToBounds = YES;
    [self.view addSubview: yourView];

    NSUInteger radius = 50;
    UIBezierPath *circlePath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 2.0*radius, 2.0*radius) cornerRadius:radius];

    UIBezierPath *path =  [UIBezierPath bezierPathWithRect:yourView];
    [path appendPath:circlePath];

    CAShapeLayer *maskLayer = [CAShapeLayer layer];
    maskLayer.path = path.CGPath;
    maskLayer.fillRule = kCAFillRuleEvenOdd;

    yourView.layer.mask  = maskLayer;

    UIImageView* smallView = [[UIImageView alloc] initWithFrame:CGRectMake(yourView.frame.origin.x + 8 ,
                                                                           yourView.frame.origin.y + 8 , 80, 80)];
    smallView.image = [UIImage imageNamed:@"testImg"];
    smallView.layer.cornerRadius = 40;
    smallView.clipsToBounds = YES;
    [self.view addSubview:smallView];


添加蒙版到图层。

【讨论】:

什么是yourView,什么是tView 抱歉,没有 tView。 yourView 是“正在显示图像的 UIImageView”。 它对我有用。添加了扩展代码及其工作结果。【参考方案2】:

你可以通过两个UIViews来做到这一点

首先将UIView 放在UIImageView 的右上角,并为其赋予与self.view 背景颜色相似的背景颜色。在你的情况下,它是蓝色的。是的,还可以通过设置圆角半径使这个视图变圆。

现在将第二个视图放在第一个视图中,并赋予其背景颜色并设置圆角半径以使其成为圆形。

你也做了一些计算,所以你的视图会出现在需要的地方。并确保您的内部视图必须位于外部视图的中心。你一定会得到想要的结果。

【讨论】:

我不想用背景色来处理它

以上是关于如何用另一个 UIView 的矩形切割 UIView 的顶角的主要内容,如果未能解决你的问题,请参考以下文章

如何用图像替换 UIView?

如何用另一个视图填充主 ViewController 上的 UIView?

三 JS - 如何用 Y 平面切割 3D 对象?

KonvaJS:如何用箭头连接两个形状?

在一个常见的视图控制器(如幻灯片菜单)中显示另一个视图控制器

如何用子视图卸载uiView