将CAGradient掩码层应用于UITextView

时间:2012-10-11 17:50:43

标签: objective-c uitextview cagradientlayer

我有一个带可滚动文本的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的背景颜色。虽然我可以选择并复制文本以粘贴到笔记程序中,但我看不到其中包含的任何文字。

我缺少什么想法?

1 个答案:

答案 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中,并在容器视图上设置掩码。

如果文本视图可以更改大小(可能是由于设备旋转),则掩码不会自动更改大小。您需要在framelayoutSubviews更新掩码的viewDidLayoutSubviews