iOS 在 UIImageView 顶部淡入黑色

Posted

技术标签:

【中文标题】iOS 在 UIImageView 顶部淡入黑色【英文标题】:iOS fade to black at top of UIImageView 【发布时间】:2015-08-06 15:03:00 【问题描述】:

我有一个UITableView,其中我的单元格backgroundViewUIImageView。我希望每张图片的顶部都变黑,这样我就可以覆盖一些白色的文字。

我查看了一些类似 this 的答案,但似乎没有一个有效。

tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)我试过了:

var imageView = UIImageView(image: image)

var gradient: CAGradientLayer = CAGradientLayer()
gradient.frame = imageView.frame
gradient.colors = [UIColor.blackColor(), UIColor.clearColor()]
gradient.locations = [0.0, 0.1]
imageView.layer.insertSublayer(gradient, atIndex: 0)

cell!.backgroundView = imageView

但我看不到渐变,与删除渐变代码时没有区别。我的渐变是否位于图像下方?

如果我用imageView.layer.mask = gradient 替换imageView.layer.insertSublayer(gradient, atIndex: 0) 行,那么我的单元格就只是空白(不再有图像)。

【问题讨论】:

我是您链接到的答案的发布者。请注意gradient.colors 应该包含CGColors 而不是UIColors。 恭喜 3k ;) 【参考方案1】:

在您的gradient.colors 中,您需要有CGColor 的数组,所以:

gradient.colors = [UIColor.blackColor().CGColor, UIColor.clearColor().CGColor]

【讨论】:

哦,他在使用 UIColors,不是吗?接得好。我错过了。【参考方案2】:

我忘记了层数组是如何排序的。但是,您应该只使用 addSubLayer 在图像视图层的顶部添加渐变层,而不是 insertSublayer:atIndex:您希望渐变层位于另一层的顶部,以便它的非透明部分覆盖图像视图。

【讨论】:

两者都适用于我接受的答案中的 CGColor 修复,但是是的,addSubLayer 绝对更简单。【参考方案3】:

对于 Swift 3.0,需要进行一些细微的调整:

    let gradient: CAGradientLayer = CAGradientLayer()
    gradient.frame = imageView.frame
    gradient.colors = [UIColor.black.cgColor, UIColor.clear.cgColor]
    gradient.locations = [0.0, 0.1]
    imageView.layer.insertSublayer(gradient, at: 0)

【讨论】:

以上是关于iOS 在 UIImageView 顶部淡入黑色的主要内容,如果未能解决你的问题,请参考以下文章

UIImageView 在启动屏幕上是黑色的

UIImageView 在动画之间淡入淡出

在 iOS 中淡入异步加载的图像

UI状态栏淡入淡出时间iOS

IPHONE - 以不同时间淡入和淡出 UIImageView

UIImageview+AFNetworking 淡入,图片缓存时也一样