我有一个带可滚动文本的UITextView。 我正在尝试对其应用渐变图层,因此可见文本的底部总是略微淡出。
这是我的代码:
CAGradientLayer *maskLayer = [CAGradientLayer layer];
maskLayer.colors = [NSArray arrayWithObjects:(id)[[UIColor clearColor] CGColor], (id)[[UIColor yellowColor] CGColor], nil];
maskLayer.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:0.2],
[NSNumber numberWithFloat:0.8],
[NSNumber numberWithFloat:1.0], nil];
maskLayer.bounds = clueTextView.bounds;
myUITextView.layer.mask = maskLayer;
现在,这导致UITextViewLayer完全透明 - 我看到UITextViewLayer作为子视图的UIView的背景颜色。虽然我可以选择并复制文本以粘贴到笔记程序中,但我看不到其中包含的任何文字。
我缺少什么想法?
答案 0 :(得分:12)
你有几个问题。
渐变图层的colors
属性需要与其locations
属性具有相同的计数。您提供4个位置,但只有2种颜色。
您正在根据clueTextView
设置渐变图层的边界,但您将其设置为myUITextView
的遮罩。
您正在设置渐变图层的bounds
,而不是position
。默认position
为0,0,表示渐变图层的中心位于myUITextView
的左上角。只需将渐变图层的frame
设置为文本视图的bounds
即可。
如果你解决了所有这些问题,你可能会得到你正在寻找的效果。
- (void)initTextViewMask {
CAGradientLayer *maskLayer = [CAGradientLayer layer];
maskLayer.colors = @[
(id)[UIColor whiteColor].CGColor,
(id)[UIColor whiteColor].CGColor,
(id)[UIColor clearColor].CGColor];
maskLayer.locations = @[ @0.0f, @0.8f, @1.0f ];
maskLayer.frame = textView_.bounds;
textView_.layer.mask = maskLayer;
}
但是,您可能会发现新问题。
如果用户可以滚动文本视图,您会发现渐变随文本视图移动,这可能不是您想要的。解决此问题的最简单方法是将文本视图嵌入容器UIView
中,并在容器视图上设置掩码。
如果文本视图可以更改大小(可能是由于设备旋转),则掩码不会自动更改大小。您需要在frame
或layoutSubviews
更新掩码的viewDidLayoutSubviews
。