ios - UITextView 渐变层应用不起作用
问题描述
我想在 UITextView 的顶部 10% 和底部 10% 上应用渐变层。为此,我放置了一个名为容器视图的虚拟 UIView,并使 UITextView 成为它的子视图。然后我添加以下代码:
if let containerView = textView.superview {
let gradient = CAGradientLayer(layer: containerView.layer)
gradient.frame = containerView.bounds
gradient.colors = [UIColor.clear.cgColor, UIColor.black.cgColor]
gradient.locations = [0.0, 0.1, 0.9, 1.0]
containerView.layer.mask = gradient
}
但是渐变只应用于顶部,而不是底部。代码有问题吗?
此外,如果我随时通过修改它的约束来调整容器视图的大小,我是否需要每次都编辑遮罩层?
编辑:这是@DonMag 答案的输出。
但我想要的是在这张图片中,文本在底部逐渐消失。
编辑2:
这是DonMag修改答案后的屏幕截图。
解决方案
@DongMag 解决方案非常复杂。相反,您只需要一个实现如下的掩码:
@IBDesignable
class MaskableLabel: UILabel {
var maskImageView = UIImageView()
@IBInspectable
var maskImage: UIImage? {
didSet {
maskImageView.image = maskImage
updateView()
}
}
override func layoutSubviews() {
super.layoutSubviews()
updateView()
}
func updateView() {
if maskImageView.image != nil {
maskImageView.frame = bounds
mask = maskImageView
}
}
}
然后用这样一个简单的渐变蒙版,你甚至可以在故事板中看到它。
注意:您可以使用此方法并替换UILabel
为您喜欢子类化的任何其他视图。
推荐阅读
- javascript - 使用 Chrome 扩展程序:有没有办法在 YouTube html5 Player on keyup 上播放动画?
- r - 使用 R 将存储在 Amazon S3 存储桶上的数据导入 SQL Server 的最有效方法
- angular - 我在页眉上显示的行为主题没有刷新
- sql - 如何将星期几添加到事件表?一周中的几天我需要一张单独的桌子吗?
- amazon-vpc - 传递子网的 CIDR 块后出现“必须是有效的 IPv4 CIDR”错误
- java - 错误,在移动文件时,由于目标目录不是空的
- python - 没有名为“PyQt5.QtWidgets”的模块
- javascript - 函数应该返回一个字符串的承诺,但没有
- python - 面向对象的 aiohttp 服务器
- reactjs - 如何在 React Redux 中访问“商店”?(或如何链接动作)