-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathReadMeLabel.m
More file actions
124 lines (103 loc) · 2.83 KB
/
ReadMeLabel.m
File metadata and controls
124 lines (103 loc) · 2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
//
// ReadMeLabel.m
// ReadMe
//
// Created by Benoît Layer on 09/03/2014.
// Copyright (c) 2014 Benoît Layer. All rights reserved.
//
#import "ReadMeLabel.h"
@interface ReadMeLabel () {
ReadMe *_readMe;
UIColor *_mainColor;
int _orp;
float _orpLocationInView;
}
@end
@implementation ReadMeLabel
#pragma mark - Init methods
- (id)init
{
self = [super init];
if (self) {
[self setup];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self setup];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
}
- (void)setup
{
_readMe = [ReadMe sharedInstance];
_readMe.delegate = self;
_readMe.wordsPerMinute = 300; // Customize readmeIfNeeded
_orpColor = [UIColor redColor]; // Default color to red
_mainColor = self.textColor;
_orpLocationInView = 0.5f;
}
#pragma mark - Actions
- (void)readText:(NSString *)text
{
[_readMe readText:text];
}
- (void)stopReading
{
[_readMe stopReading];
}
#pragma mark - Delegate methods
- (void)readMe:(ReadMe *)readMe didReadWord:(NSString *)newWord withORP:(int)orp
{
// Setting a fully red attributed string sets the textcolor to red.
// We need to keep track of it and reset it everytime.
self.textColor = _mainColor;
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:newWord];
NSRange beginRange = NSMakeRange(0, orp);
[string addAttribute:NSForegroundColorAttributeName value:self.textColor range:beginRange];
NSRange orpRange = NSMakeRange(orp, 1);
[string addAttribute:NSForegroundColorAttributeName value:self.orpColor range:orpRange];
NSRange endRange = NSMakeRange(orp+1, newWord.length-(orp+1));
[string addAttribute:NSForegroundColorAttributeName value:self.textColor range:endRange];
_orp = orp;
self.attributedText = string;
}
- (void)readMeDidFinishReading:(ReadMe *)readMe
{
self.text = @"";
}
#pragma mark - Properties
- (void)setTextColor:(UIColor *)textColor
{
[super setTextColor:textColor];
_mainColor = textColor;
}
- (void)drawTextInRect:(CGRect)rect
{
if (self.attributedText.length > 0)
{
// Inset text from left to have the orp centered.
NSAttributedString *leftSubstring = [self.attributedText attributedSubstringFromRange:NSMakeRange(0, _orp)];
NSLog(@"%@",leftSubstring);
CGSize leftSubstringSize = [leftSubstring size];
float xCenter = self.bounds.size.width * _orpLocationInView;
float offset = xCenter - leftSubstringSize.width;
[super drawTextInRect:CGRectOffset(rect, offset, 0.f)];
}
else
{
[super drawTextInRect:rect];
}
}
@end