ios 自定义滑动以删除带下拉阴影的圆形TableViewCell

lyfkaqu1  于 2023-06-07  发布在  iOS
关注(0)|答案(1)|浏览(150)

我试图使一个自定义的滑动删除风格,似乎是后面的细胞本身,而不是并排像默认trailingSwipeActionsConfiguration。
就像这样:

有没有什么方法可以创造出这样的设计呢?从我尝试过的默认滑动控制,将有一个细胞本身和删除按钮之间的差距,由于细胞填补下拉阴影,也是红色的删除按钮需要扩大下圆角的细胞。我还尝试在调用tableview willBeginEditingRowAt时在单元格后面创建一个子视图,但它似乎关闭了(有时有效,有时无效)。也许有一个合适的方法来实现这一点。

k2arahey

k2arahey1#

我希望我不会太晚)
为此,您需要为action元素设置自定义视图。
一种不太复杂的方法是在单元格的主视图下方添加另一个红色视图,并通过自定义滑动简单地设置新的平移。对于此视图,可以使用

tableView.subviews.forEach { view in 
   view.layer.shadow ....
}

另一种方法是为action元素创建掩码。

func configureMaskFor(size: CGSize) -> CAShapeLayer{
    let cornerRadius: CGFloat = 9

    let bezierPath = UIBezierPath()
    let startPoint = CGPoint(x: 0, y: 0)
    bezierPath.move(to: startPoint)

    let point1 = CGPoint(x: size.width - cornerRadius, y: 0)
    bezierPath.addLine(to: point1)
    bezierPath.addArc(withCenter: CGPoint(x: point1.x, y: cornerRadius), radius: cornerRadius, startAngle: CGFloat(Double.pi / 2 * 3), endAngle: 0, clockwise: true)

    let point2 = CGPoint(x: size.width, y: size.height - cornerRadius)
    bezierPath.addLine(to: point2)
    bezierPath.addArc(withCenter: CGPoint(x: point1.x, y: point2.y), radius: cornerRadius, startAngle: 0, endAngle: CGFloat.pi / 2, clockwise: true)

    let point3 = CGPoint(x: 0, y: size.height)
    bezierPath.addLine(to: point3)
    bezierPath.addArc(withCenter: CGPoint(x: point3.x, y: point3.y - cornerRadius), radius: cornerRadius, startAngle: CGFloat.pi / 2 , endAngle: 0, clockwise: false)

    let point4 = CGPoint(x: cornerRadius, y: cornerRadius)
    bezierPath.addLine(to: point4)
    bezierPath.addArc(withCenter: CGPoint(x: 0, y: cornerRadius), radius: cornerRadius, startAngle: 0, endAngle: CGFloat.pi / 2 * 3 , clockwise: false)

    bezierPath.close()

    let shapeLayer = CAShapeLayer()
    shapeLayer.path = bezierPath.cgPath
    return shapeLayer
}

然后在layoutSubviews()中添加遮罩。

view.layer.mask = configureMaskFor(size: CGSize(width: contentView.frame.width * 0.2 , height: contentView.frame.height))

相关问题