Swift。添加一个渐变到tableview隐藏内容

问题描述:

我有一个tableview,它运作良好。但我必须在背景上添加渐变。我用viewDidLoad中的这段代码做了:Swift。添加一个渐变到tableview隐藏内容

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

要正确配置背景渐变,您可以使用UITableViewbackgroundView属性和CAGradientLayer的查看。所得代码(在夫特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

它会给我错误?在下面的函数....?对于swift 3: private var gradientLayer:CAGradientLayer { return layer as! CAGradientLayer } - >无法将类型'CALayer'(0x10ac29de8)的值转换为'CAGradientLayer'(0x10ac2a838)。 –