Mik*_*ein 4 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;
Run Code Online (Sandbox Code Playgroud)
现在,这导致UITextViewLayer完全透明 - 我看到UITextViewLayer作为子视图的UIView的背景颜色.虽然我可以选择并复制文本以粘贴到notes程序中,但我看不到其中包含的任何文本.
我缺少什么想法?
rob*_*off 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;
}
Run Code Online (Sandbox Code Playgroud)
但是,您可能会发现新问题.
如果用户可以滚动文本视图,您将发现渐变随文本视图移动,这可能不是您想要的.解决此问题的最简单方法是将文本视图嵌入容器中UIView,并在容器视图上设置掩码.
如果文本视图可以更改大小(可能是由于设备旋转),则掩码不会自动更改大小.你需要frame在layoutSubviews或中更新掩码viewDidLayoutSubviews.