Jod*_*ner 9 linear-gradients uitableview nsarray swift
我是iOS开发的新手,我正在尝试学习Swift.我想对UITableView应用垂直alpha渐变,但是遇到了一些麻烦.
最初在这篇SO帖子之后,我做了以下事情:
var gradientMaskLayer:CAGradientLayer = CAGradientLayer()
gradientMaskLayer.frame = myTableView.bounds
gradientMaskLayer.colors = [UIColor.clearColor().CGColor, UIColor.blackColor().CGColor]
gradientMaskLayer.locations = [0.0, 0.05]
myTableView.layer.mask = gradientMaskLayer
Run Code Online (Sandbox Code Playgroud)
在得到错误Array element cannot be bridged to Objective-C
并阅读此SO帖子后,我修改了使用的两个数组:
var gradientMaskLayer:CAGradientLayer = CAGradientLayer()
var gradientMaskColors:NSArray = [UIColor.clearColor().CGColor, UIColor.blackColor().CGColor]
var gradientMaskLocations:NSArray = [0.0, 0.05]
gradientMaskLayer.frame = myTableView.bounds
gradientMaskLayer.colors = gradientMaskColors
gradientMaskLayer.locations = gradientMaskLocations
myTableView.layer.mask = gradientMaskLayer
Run Code Online (Sandbox Code Playgroud)
现在得到错误 Value failed to bridge from Swift type to a Objective-C type
我很难找到解决方案.可以提供一些帮助吗?
ric*_*ira 27
你应该掩盖superview
,而不是视图本身.
这是一个例子:
let gradient = CAGradientLayer()
gradient.frame = tableView.superview?.bounds ?? .null
gradient.colors = [UIColor.clear.cgColor, UIColor.clear.cgColor, UIColor.black.cgColor, UIColor.black.cgColor, UIColor.clear.cgColor, UIColor.clear.cgColor]
gradient.locations = [0.0, 0.15, 0.25, 0.75, 0.85, 1.0]
tableView.superview?.layer.mask = gradient
tableView.backgroundColor = .clear
Run Code Online (Sandbox Code Playgroud)
结果:
您可以通过更改和属性来更改方向.默认值(垂直)分别为(0.5,0.0)和(0.5,1).点(0,0)是图层的左下角,(1,1)是右上角.例如,如果要水平而不是垂直应用该蒙版,只需执行以下操作:startPoint
endpoint
gradient.startPoint = .init(x: 0.0, y: 0.5)
gradient.endPoint = .init(x: 1.0, y: 0.5)
Run Code Online (Sandbox Code Playgroud)
还有一件事:如果您使用AutoLayout,则需要使用正确的CGRect
值更新图层.我通常覆盖layoutSubviews()
方法来更新它gradient.frame = tableView.superview?.bounds ?? .null
.
归档时间: |
|
查看次数: |
11765 次 |
最近记录: |