Nano Hash - криптовалюты, майнинг, программирование

Как сделать так, чтобы у ячеек был градиентный фон?

Я вставил табличное представление в свой контроллер представления, и мне было интересно, как я могу придать ячейкам в табличном представлении градиентный фон? Могу ли я отредактировать каждую ячейку отдельно, чтобы придать ей фон с другим цветовым градиентом для каждой ячейки? Например, каждая ячейка помечена после индекса в массиве trainingLevels, как я могу сделать так, чтобы у каждой был другой цветовой градиент фона?

Вот мой код:

import UIKit

 class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

var trainingLevels = ["Ball Handling", "Shooting", "Defense", "Advanced Drills", "Vertimax Drills", "Full Workouts", "BHB Products"]


@IBOutlet weak var tableView: TableView!


func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    cell.backgroundColor = UIColor.clear
}

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{

    return trainingLevels.count
}


public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "bell")
    cell.textLabel?.text = trainingLevels[indexPath.row]

    //cell details
    cell.backgroundColor = UIColor.black
    cell.textLabel?.textColor = UIColor.white



    return cell
}

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.delegate = self
    tableView.dataSource = self

    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}

  • Подкласс UITableViewCell и установите фон с помощью градиентного слоя. 05.08.2017
  • нужно ли устанавливать градиент для каждой ячейки? просто установите цвет градиента для фона, и он даст одинаковый эффект в каждой вашей ячейке. По моему мнению, это может отставать, если вы предоставите градиент в каждой ячейке. 05.08.2017

Ответы:


1

Вы можете создать расширение UIView:

extension UIView{
    func addGradientBackground(firstColor: UIColor, secondColor: UIColor){
        clipsToBounds = true
        let gradientLayer = CAGradientLayer()
        gradientLayer.colors = [firstColor.cgColor, secondColor.cgColor]
        gradientLayer.frame = self.bounds
        gradientLayer.startPoint = CGPoint(x: 0, y: 0)
        gradientLayer.endPoint = CGPoint(x: 0, y: 1)
        print(gradientLayer.frame)
        self.layer.insertSublayer(gradientLayer, at: 0)
    }
}

А внутри вашей ячейки просто:

override func awakeFromNib() {
    super.awakeFromNib()
    self.addGradientBackground(firstColor: .green, secondColor: .blue)
}
05.08.2017
  • Добавьте эту строку только в файл Xib, в противном случае, когда ячейка будет перезагружена, добавьте несколько градиентов в ячейку self.addGradientBackground(firstColor: .green, secondColor: .blue) 17.04.2018
  • У меня есть идентичное расширение для градиента в uiview, но я обнаружил, что в зависимости от размера экрана градиент либо не заполняет ширину ячейки при использовании в awakeFromNib(), либо неправильно заполняется при использовании в layoutSubviews(). Draw(_ rect: CGRect), похоже, обновляется правильно. 18.02.2019

  • 2

    Сначала вам нужно создать градиент, а затем вставить подслой в вашу ячейку, как показано ниже.

    func gradient(frame:CGRect) -> CAGradientLayer {
        let layer = CAGradientLayer()
        layer.frame = frame
        layer.startPoint = CGPointMake(0,0.5)
        layer.endPoint = CGPointMake(1,0.5)
        layer.colors = [ 
        UIColor.red.cgColor,UIColor.blue.cgColor]
        return layer
    }
    
    //Now on your tableViewcell do below
    
    cell.layer.insertSublayer(gradient(cell.bounds), atIndex:0)
    

    для Свифт 4.0

    func gradient(frame:CGRect) -> CAGradientLayer {
            let layer = CAGradientLayer()
            layer.frame = frame
            layer.startPoint = CGPoint(x: 0, y: 0.5)
            layer.endPoint = CGPoint(x: 1, y: 0.5)
            layer.colors = [
                UIColor.gray.cgColor,UIColor.cyan.cgColor]
            return layer
        }
    
        cell.layer.insertSublayer(gradient(frame: backgroundView.bounds), at:0)
    
    05.08.2017
  • Я рекомендую поместить строку cell.layer.insertSublayer(gradient(cell.bounds), atIndex:0) в подкласс функции awakeFromNib() UITableViewCell и заменить cell на self. Это может легко вызвать задержку прокрутки, если эта строка находится в функции tableView(cellForRowAt:). 05.08.2017
  • Как реализовать замену cell на self? 05.08.2017
  • также говорит, что cgcolor недоступен в быстром 05.08.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..