一尘不染

将垂直Alpha渐变应用于UITableView

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

收到错误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

现在得到错误 Value failed to bridge from Swift type to a Objective-C type

我正在努力寻找解决方案。有什么可以帮助的吗?


阅读 237

收藏
2020-07-07

共1个答案

一尘不染

因此,我相信您可以解决您的问题,但是不确定我是否完全理解。当您尝试创建 AnyObject包含隐式展开的CoreFoundation类型的隐式展开的数组时,似乎会出现问题: __

let implicitlyUnwrappedCGColor:CGColor! = UIColor.clearColor().CGColor
let implicitlyUnwrappedAnyObjectArray:[AnyObject]! = [implicitlyUnwrappedCGColor]

给出array element cannot be bridged to Objective-C错误。

感觉这肯定是Swift编译器的问题,尤其是以下情况,其中隐式解包CGColor被声明为隐式解包AnyObject,这似乎使编译器再次感到高兴:

let implicitlyUnwrappedCGColor:AnyObject! = UIColor.clearColor().CGColor
let implicitlyUnwrappedAnyObjectArray:[AnyObject]! = [implicitlyUnwrappedCGColor]

就像将标准的Objective-C对象粘贴到数组中一样:

let implicitlyUnwrappedCGColor:CGColor! = UIColor.clearColor().CGColor
let uiColor = UIColor.clearColor()
let implicitlyUnwrappedAnyObjectArray:[AnyObject]! = [implicitlyUnwrappedCGColor, uiColor]

无论如何,请尝试以下方法来解决您的问题:

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
2020-07-07