gpt4 book ai didi

swift - 将垂直 alpha 渐变应用于 UITableView

转载 作者:IT王子 更新时间:2023-10-29 05:45:46 25 4
gpt4 key购买 nike

我是 iOS 开发的新手,正在尝试学习 Swift。我想对 UITableView 应用垂直 alpha 渐变,但遇到了一些麻烦。

最初关注this SO post ,我做了以下事情:

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 并读取this SO post 之后我修改了使用的两个数组:

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

我正在努力寻找解决方案。任何人都可以提供帮助吗?

最佳答案

您应该屏蔽superview,而不是 View 本身。

这是一个例子:

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

结果:

Mask + TableView

您可以通过更改 startPointendpoint 属性来更改方向。默认值(垂直)分别为 (0.5, 0.0) 和 (0.5, 1)。点 (0,0) 是图层的左下角,(1,1) 是图层的右上角。例如,如果您想水平而不是垂直应用该蒙版,只需执行以下操作:

gradient.startPoint = .init(x: 0.0, y: 0.5)
gradient.endPoint = .init(x: 1.0, y: 0.5)

还有一件事:如果您正在使用 AutoLayout,那么您需要使用正确的 CGRect 值更新图层。我通常重写 layoutSubviews() 方法来更新它,比如 gradient.frame = tableView.superview?.bounds ?? .nu​​ll.

关于swift - 将垂直 alpha 渐变应用于 UITableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25355058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com