swift 中的半椭圆形按钮

Half oval button in swift

如何在 Swift.

中设置半椭圆形 UIButton

我想要一个具有图像灰色区域形状的按钮

注意:黑色背景不是按钮的一部分。按钮只是灰色的。

我试过

    let circlePath = UIBezierPath.init(arcCenter: CGPoint(x: self.bounds.size.width / 2, y: bounds.size.height), radius: bounds.size.width / 2, startAngle: 0, endAngle: .pi, clockwise: true)
    let circleShape = CAShapeLayer()
    circleShape.path = circlePath.cgPath
    self.layer.mask = circleShape

但我正在变成半圆形。我也试过改变弧的中心和半径仍然没有机会。

所以看起来问题真的只是画出你图中显示的形状。如果你能做到这一点,你就可以随心所欲地使用形状——例如,你可以填充它并在形状层中使用填充的形状作为蒙版,你已经知道如何做到这一点。所以让我们专注于形状。

我能像这样画出你的形状:

我认为这与您提供的内容相当接近。下面我就说说我是怎么画的吧

我假设以下相对尺寸(当然您可以根据需要调整这些尺寸):右侧的垂直直线应与水平直线部分的比例为 4:3。

为了简单起见,那么,我将只使用 40(垂直)和 30(水平直线)的尺寸,并且我将使我的工作 space 50 点宽,以便为 end-cap.

我们开始:

    // assume proportions height 40, straight horizontal part 30
    let path = CGMutablePath()
    // start at the top right
    path.move(to: .init(x: 50, y: 0))
    // draw the top line
    path.addLine(to: .init(x: 20, y: 0))
    // add the arc
    path.addRelativeArc(
        center: .init(x: 20, y: 20),
        radius: 20,
        startAngle: -.pi/2,
        delta: -.pi
    )
    // draw the bottom line
    path.addLine(to: .init(x: 50, y: 40))
    // finish
    path.closeSubpath()

就是这样!如果将该路径分配给 CAShapeLayer,您会发现您得到了上图中的形状。现在您可以根据需要简单地调整参数并以任何您喜欢的方式使用路径。