UITableViewCell - установить фон в качестве градиента на «Удалить» (Swipeable Action) - Swift 4.2 - PullRequest
0 голосов
/ 15 марта 2019

Я настроил свое скользящее действие для 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.

Проверено много вопросов на стеке потока, но не в состоянии это сделать. Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

Вы можете попытаться создать цвет из градиентного изображения следующим образом:

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)
)

Но этот код имеет некоторые ограничения.Вы не можете угадать размер вида действия.Таким образом, в зависимости от ваших потребностей, вы можете либо повторить цвет, растянуть его или использовать большое изображение.Использование сторонних библиотек также является хорошим вариантом.

result

0 голосов
/ 15 марта 2019

Во многих случаях реализации Apple по умолчанию займут вас только далеко, и любая дальнейшая настройка требует повторной реализации функции.

Это похоже на один из тех случаев, поскольку контекстное действие не является представлением, поэтому вы не можете изменить его, чтобы добавить градиент, как это было бы с другими представлениями, и его свойства ограничены.

Возможны следующие варианты: создать собственную ячейку перелистывания, использовать стороннюю библиотеку ( как эта ) или просто использовать сплошной цвет.

...