圆形视图的右上角和左上角?

Hob*_*ist -1 cashapelayer ios uibezierpath swift

我正在试图弄清楚如何掩盖UIView以显示一个形状,该形状代表一个坐在其上的半圆形的正方形.

基本上,就像将边界半径仅应用于顶部两个角以将它们圆化并创建弧形.

我正在使用swift,这让我发疯了.

编辑:CornerRadius没有做我想要的.我觉得我必须使用CGShapeLayer,但我不确定如何创建弧.

EDIT2: 在此输入图像描述

EDIT3:

考虑解释我想要什么,提供图片,并解释我不理解我需要做什么,或者我需要做什么对某些人来说是不够的,这是我尝试过的:

尝试设置layer.cornerRadius属性,同时将视图的底部推出屏幕以隐藏底角不会出现切断,这种类型的遮蔽太圆形并且没有提供正确的圆弧效果.

我尝试使用UIBezierPath设置前两个角来使用视图的cornerRadii width / 2.这也没有产生适当的结果.在尝试将值硬编码到cornerRadii中时,我注意到无论值如何,我似乎无法获得我想要的结果.

还有哪些其他选择?或者我只是错误地使用BezierPath?

编辑4:

这是我的原始代码.

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    let bezierPath = UIBezierPath(roundedRect: navBarView.bounds, byRoundingCorners: [.TopLeft, .TopRight], cornerRadii: CGSizeMake(navBarView.bounds.width / 2, navBarView.bounds.width / 2)).CGPath;

    let shapeLayer = CAShapeLayer();
    shapeLayer.bounds = navBarView.bounds
    shapeLayer.path = bezierPath
    navBarView.layer.mask = shapeLayer

    updateUI() // <-- Label text, etc. 
}
Run Code Online (Sandbox Code Playgroud)

此外,如前所述,曾尝试过 navBarView.layer.cornerRadius = x

Ram*_*h_T 5

试试这个:

let path = UIBezierPath(roundedRect:self.view.bounds, byRoundingCorners:[.TopLeft, .TopRight], cornerRadii: CGSizeMake(20, 20))
    let maskLayer = CAShapeLayer()
    maskLayer.frame = self.view.bounds;
    maskLayer.path = path.CGPath
    self.view.layer.mask = maskLayer;
Run Code Online (Sandbox Code Playgroud)

UIBezierPath类可以定义一个由直线和曲线线段的路径,并呈现在您的自定义视图该路径.

  1. 在UIBezierPath中生成路径的圆角
  2. 要生成CAShapeLayer,它将设置为路径之一
  3. 将图层分层到您想要的一侧仅将圆角2作为遮罩层

例:

let DynamicView=UIView(frame: CGRectMake(50, 200, 200, 300))
        DynamicView.backgroundColor=UIColor.redColor()
        let path = UIBezierPath(roundedRect:DynamicView.bounds, byRoundingCorners:[.TopLeft, .TopRight], cornerRadii: CGSizeMake(20, 20))
        let maskLayer = CAShapeLayer()
        maskLayer.frame = DynamicView.bounds;
        maskLayer.path = path.CGPath
        DynamicView.layer.mask = maskLayer;


        self.view.addSubview(DynamicView)
Run Code Online (Sandbox Code Playgroud)

结果:

大段引用