2016-01-29 5 views
1

У меня есть табличное представление, и оно работает хорошо. Но мне нужно добавить градиент на фоне. Я сделал это с этим кодом в viewDidLoad:Swift. Добавление градиента в таблицуview скрывает содержимое

gradientLayer.frame = self.view.bounds 
let color1 = UIColor.blueColor().CGColor as CGColorRef 
let color2 = UIColor.redColor().CGColor as CGColorRef 
gradientLayer.colors = [color1, color2] 
gradientLayer.locations = [0.0, 1.0] 
gradientLayer.startPoint = CGPoint(x: 1, y: 0) 
gradientLayer.endPoint = CGPoint(x: 0, y: 0) 
self.view.layer.addSublayer(gradientLayer) 
self.view.backgroundColor = UIColor.greenColor() 

Но теперь я не вижу содержание моего Tableview.

Может кто-нибудь протянуть мне руку помощи, пожалуйста?

+0

Вместо того чтобы использовать 'self.view.layer.addSublayer (gradientLayer)', 'попробовать self.layer.insertSublayer (gradientLayer, atIndex: 0)'. –

+0

@SauvikDolui да, это работает, но с простой коррекцией. 'self.view.layer.insertSublayer (gradientLayer, atIndex: 0)' вместо 'self.layer.insertSublayer (gradientLayer, atIndex: 0). Также для ** Swift 3 ** atIndex только что стал. – elia

ответ

3

Для правильного конфигурирования градиента можно использовать свойство backgroundView объекта UITableView и вид с CAGradientLayer. Результирующий код (в Swift 3) будет:

/* A small UIView subclass displaying gradient */ 

class GradientView: UIView { 

    /* Overriding default layer class to use CAGradientLayer */ 
    override class var layerClass: AnyClass { 
     return CAGradientLayer.self 
    } 

    /* Handy accessor to avoid unnecessary casting */ 
    private var gradientLayer: CAGradientLayer { 
     return layer as! CAGradientLayer 
    } 

    /* Public properties to manipulate colors */ 
    public var fromColor: UIColor = UIColor.red { 
     didSet { 
      var currentColors = gradientLayer.colors 
      currentColors![0] = fromColor.cgColor 
      gradientLayer.colors = currentColors 
     } 
    } 

    public var toColor: UIColor = UIColor.blue { 
     didSet { 
      var currentColors = gradientLayer.colors 
      currentColors![1] = toColor.cgColor 
      gradientLayer.colors = currentColors 
     } 
    } 

    /* Initializers overriding to have appropriately configured layer after creation */ 
    override init(frame: CGRect) { 
     super.init(frame: frame) 
     gradientLayer.colors = [fromColor.cgColor, toColor.cgColor] 
     gradientLayer.startPoint = CGPoint(x: 0, y: 0.5) 
     gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.5) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     gradientLayer.colors = [fromColor.cgColor, toColor.cgColor] 
     gradientLayer.startPoint = CGPoint(x: 0, y: 0.5) 
     gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.5) 
    } 
} 


/* Code that should be called in viewDidLoad method */ 

class MyViewController: UITableViewController { 

    /* ... */ 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.backgroundView = GradientView() 
    } 

    /* ... */ 

} 
+0

Большое спасибо! Это действительно работает. Только одно, извините, как сделать его горизонтальным? – user3742622

+0

Добро пожаловать! Добавлено 2 строки для каждого инициализатора, которые настраивают направление горизонтального градиента. – Zapko

+0

это даст мне ошибку ??? ниже функция ....? для быстрого 3: приватный var gradientLayer: CAGradientLayer { вернуть слой как! CAGradientLayer } -> Не удалось отличить значение типа CALayer (0x10ac29de8) до 'CAGradientLayer' (0x10ac2a838). –

Смежные вопросы