0

我已经为 UITableViewCell 定制了我的尾随滑动动作。它有一个图像以及标题和背景颜色。它是这样完成的:

    func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    let deleteAction = UIContextualAction(style: .normal, title: ActionTitle.delete) { (deleteAction, view, handler) in
        self.deleteAction(indexPath: indexPath)
        return handler(true)
    }
    deleteAction.image = Common.getImageAndTitleForTableRowAction(title: ActionTitle.delete, actionImage: #imageLiteral(resourceName: "delete"))
    deleteAction.backgroundColor = Color.orangeColor
    let editAction = UIContextualAction(style: .normal, title: ActionTitle.edit) { (editAction, view, handler) in
        self.selectedIndexPath = indexPath
        self.editLoanRecord()
        return handler(true)
    }
    editAction.image = Common.getImageAndTitleForTableRowAction(title: ActionTitle.edit, actionImage: #imageLiteral(resourceName: "edit"))
    editAction.backgroundColor = Color.blueColor
    return UISwipeActionsConfiguration(actions: [deleteAction, editAction])
}

现在我需要将 设置backgroundColor为渐变。

检查了很多关于stackoverflow的问题,但无法这样做。任何帮助将不胜感激。

4

2 回答 2

1

您可以尝试从渐变图像创建颜色,如下所示:

func linearGradientColor(from colors: [UIColor], locations: [CGFloat], size: CGSize) -> UIColor {
    let image = UIGraphicsImageRenderer(bounds: CGRect(x: 0, y: 0, width: size.width, height: size.height)).image { context in
        let cgColors = colors.map { $0.cgColor } as CFArray
        let colorSpace = CGColorSpaceCreateDeviceRGB()
        let gradient = CGGradient(
            colorsSpace: colorSpace,
            colors: cgColors,
            locations: locations
        )!
        context.cgContext.drawLinearGradient(
            gradient,
            start: CGPoint(x: 0, y: 0),
            end: CGPoint(x: size.width, y:0),
            options:[]
        )
    }
    return UIColor(patternImage: image)
}

...

deleteAction.backgroundColor = linearGradientColor(
    from: [.red, .blue],
    locations: [0, 1],
    size: CGSize(width: 100, height: 44)
)

但是这段代码有一些限制。你无法猜测动作视图的大小。因此,根据您的需要,您可以重复颜色、拉伸它或使用大图像。使用第三方库也是一个不错的选择。

结果

于 2019-03-15T15:42:08.293 回答
0

在许多情况下,Apple 的默认实现只能带您到此为止,任何进一步的自定义都需要重新实现该功能。

这似乎是其中一种情况,因为上下文操作不是视图,因此您不能像使用其他视图那样修改它以添加渐变,并且它的属性是有限的。

你的选择是:实现你自己的滑动单元,使用第三方库(比如这个),或者简单地使用纯色。

于 2019-03-15T15:16:19.767 回答