最近有个需求,TextView显示从录音转出的文字,在播放时,播放一段文字时需要高亮选中动效(刷色+透明度变换)。
解决步骤:
1:覆盖一个一模一样的textView、相同的frame、font。
2:设置textView的selectedRange
3:拿到textView的selectedTextRange
4:根据selectedTextRange通过selectionRectsForRange方法拿到选中的UITextSelectionRect数组,UITextSelectionRect中包含选中的rect信息,选中的首尾位置。
5:分析UITextSelectionRect数组给textView的layer添加CABasicAnimation的相关path和opacity等动效
代码很简单:
新建一个同样的textView1
2
3
4
5
6
7
8
9
10
11
12
13//额外添加一个用来做高亮的textview
_maskTextview = [UITextView new];
_maskTextview.text = testString;
_maskTextview.textColor = [UIColor redColor];//你要高亮的颜色
_maskTextview.font = [UIFont systemFontOfSize:20];
_maskTextview.frame = textView.frame;
[self.view addSubview:_maskTextview];
_layer = [CAShapeLayer layer];
_layer.frame = _maskTextview.bounds;
_layer.fillColor = [UIColor blackColor].CGColor;//本来textview的颜色
[_maskTextview.layer setMask:_layer];