我是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帖子后,我修改了所使用的两个数组:
Array element cannot be bridged to Objective-C
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
Value failed to bridge from Swift type to a Objective-C type
我正在努力寻找解决方案。有什么可以帮助的吗?
因此,我相信您可以解决您的问题,但是不确定我是否完全理解。当您尝试创建 仅AnyObject包含隐式展开的CoreFoundation类型的隐式展开的数组时,似乎会出现问题: __
AnyObject
let implicitlyUnwrappedCGColor:CGColor! = UIColor.clearColor().CGColor let implicitlyUnwrappedAnyObjectArray:[AnyObject]! = [implicitlyUnwrappedCGColor]
给出array element cannot be bridged to Objective-C错误。
array element cannot be bridged to Objective-C
感觉这肯定是Swift编译器的问题,尤其是以下情况,其中隐式解包CGColor被声明为隐式解包AnyObject,这似乎使编译器再次感到高兴:
CGColor
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