美文网首页iOS学霸笔记与文字有关的iOS程序猿
为你的文本框添加进度提示模糊层

为你的文本框添加进度提示模糊层

作者: 卖报的小画家Sure | 来源:发表于2017-05-03 14:24 被阅读1272次
######前言
最近用小黄车发现地图界面下方的渐变模糊效果不错,遂想尝试实现一下。目的为TextView添加渐变模糊层以便提示用户阅读进度。效果如下: 模糊效果

对于渐变模糊效果我们要通过CAGradientLayer类进行实现。推荐一篇文章CAGradientLayer的一些属性解析书写的比较详细。

该效果结构为主体TextView加上侧与下侧的渐变模糊层,并在TextView滚动时候调节渐变层显隐性即可。

首先分别创建TextView与渐变层,TextView创建代码已忽略。

- (void)createGradientLayer {
    //颜色分布
    NSArray *layerColors = @[(__bridge id)RGB(255, 255, 255, 0.0).CGColor, (__bridge id)RGB(255, 255, 255, 0.5).CGColor, (__bridge id)RGB(255, 255, 255, 0.95).CGColor];
    //分割位置
    NSArray *layerLocations = @[@(0.2), @(0.8), @(1.0)];

    _topGradientLayer = [CAGradientLayer layer];
    _topGradientLayer.borderWidth = 0;
    _topGradientLayer.frame = CGRectZero;
    _topGradientLayer.colors = layerColors;
    _topGradientLayer.locations  = layerLocations;
    //自下而上
    _topGradientLayer.startPoint = CGPointMake(0.5, 1.0);
    _topGradientLayer.endPoint = CGPointMake(0.5, 0.0);
    [self.layer addSublayer:_topGradientLayer];
    
    _bottomGradientLayer = [CAGradientLayer layer];
    _bottomGradientLayer.borderWidth = 0;
    _bottomGradientLayer.frame = CGRectZero;
    _bottomGradientLayer.colors = layerColors;
    _bottomGradientLayer.locations  = layerLocations;
     //自上而下
    _bottomGradientLayer.startPoint = CGPointMake(0.5, 0.0);
    _bottomGradientLayer.endPoint = CGPointMake(0.5, 1.0);
    [self.layer addSublayer:_bottomGradientLayer];
    
    _topGradientLayer.hidden = YES;
    _bottomGradientLayer.hidden = YES;
}

这里简单讲述下CAGradientLayer的一些重要属性

  • colors:颜色分布,可将所需颜色存入数组中
  • locations:颜色间隔位置
  • startPoint:开始点
  • endPoint:结束点
    ⚠️需要注意的是Layer的坐标系与通常坐标系有所不同,见下图
Layer坐标系

因此比如startPoint为(0,0) endPoint为(1,0),颜色渐变即为由左向右的方向,以此类推。

接下来在layoutSubviews方法中设置控件坐标并判断当前TextView文字占比是否高于当前TextView本身高度,若高于说明有未显示文字则显示下侧渐变层。这里简单调节了TextView的行间距,需要注意的是TextView设置行间距后系统会给文字上下各加2px,因此假设设置行间距为10,paragraphStyle需设置为6px

- (void)layoutSubviews {
    [super layoutSubviews];
    CGFloat width = self.bounds.size.width;
    CGFloat height = self.bounds.size.height;
    _textView.frame = self.bounds;
    _topGradientLayer.frame = CGRectMake(0, 0, width, height / 2);
    _bottomGradientLayer.frame = CGRectMake(0, height / 2, width, height / 2);
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    [paragraphStyle setLineSpacing:6];
    CGSize size = [_textView.text boundingRectWithSize:CGSizeMake(width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:_textView.font,NSParagraphStyleAttributeName:paragraphStyle} context:NULL].size;
    if (size.height > height) {
        _topGradientLayer.hidden = YES;
        _bottomGradientLayer.hidden = NO;
    }
}

最后我们都知道TextView继承于UIScrollView,所以我们可以在scrollViewDidScroll代理方法中调整上侧下侧渐变层的显隐性以达到我们想要的效果。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (scrollView.contentOffset.y > 15) {
        _topGradientLayer.hidden = NO;
    }else{
        _topGradientLayer.hidden = YES;
    }
    if (scrollView.contentOffset.y < scrollView.contentSize.height - 15 - scrollView.frame.size.height) {
        _bottomGradientLayer.hidden = NO;
    }else{
        _bottomGradientLayer.hidden = YES;
    }
}

这里简单的判断偏移量大于15隐藏上侧显示下侧,偏移量距底部15显示下侧隐藏上侧。

效果实现到此结束,功能比较简单,娱乐一下。。。
demo下载地址

相关文章

  • 为你的文本框添加进度提示模糊层

    对于渐变模糊效果我们要通过CAGradientLayer类进行实现。推荐一篇文章CAGradientLayer的一...

  • 在使用STPopup第三方时遇到的bug:未解决

    描述一下需求:根据文本框输入文字判端不规范的时候在文本框下添加label展示错误提示,如下图:需求的样式, 所以在...

  • iOS9.0之后提示框进阶样式

    1.在alert提示框对象中添加一个UITextField类型的文本框,构成文本对话框。 2.之后添加到根视图控制...

  • bug2

    遇到的几个项目通用的问题: 1.提示文字 文本框内默认placeholder、文本框下红色提示文字、接口返回结果的...

  • tqdm

    Tqdm 是 Python 进度条库,可以在 Python 长循环中添加一个进度提示信息用法:tqdm(itera...

  • 【HTML5】增强型表单标签

    一、增型表单标签 HTML5中,新标准把文本框提示信息、表单校验、日期选择控件、颜色选择控件、范围控件、进度条、标...

  • 问题记录 - 子视图不响应父视图的手势

    需求:自定义一个提示框,添加一个全屏的透明遮罩层,点击遮罩层提示框隐藏消失,点击提示框不做响应。 问题:在遮罩层正...

  • UITextView的提示文字placeHolder

    需求: 实现一个多行文本框,带有提示语。 实现: 一、思路 1、一个UILabel,添加到UITextView上2...

  • bootstrap提示信息

    div标签:-alert类:为提示信息添加样式-alert-info类:为提示信息添加样式,类似的还有alert-...

  • 为tableview和collectionView添加数据为空的

    简单有效的为UITableView和collectionView添加数据为空的提示 给UITableView添加一...

网友评论

本文标题:为你的文本框添加进度提示模糊层

本文链接:https://www.haomeiwen.com/subject/zntvzttx.html