-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
DTDictationPlaceholderView.m
123 lines (95 loc) · 2.81 KB
/
DTDictationPlaceholderView.m
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
//
// DTDictationPlaceholderView.m
// DTRichTextEditor
//
// Created by Oliver Drobnik on 05.02.13.
// Copyright (c) 2013 Cocoanetics. All rights reserved.
//
#import "DTDictationPlaceholderView.h"
#if TARGET_OS_IPHONE && !TARGET_OS_WATCH
// if you change any of these then also make sure to adjust the sizes in DTDictationPlaceholderTextAttachment
#define DOT_WIDTH 10.0f
#define DOT_DISTANCE 2.5f
#define DOT_OUTSIDE_MARGIN 3.0f
@implementation DTDictationPlaceholderView
{
NSUInteger _phase;
NSTimer *_phaseTimer;
}
+ (DTDictationPlaceholderView *)placeholderView;
{
return [[DTDictationPlaceholderView alloc] initWithFrame:CGRectZero];
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
self.backgroundColor = [UIColor clearColor];
[self sizeToFit];
}
return self;
}
- (CGSize)sizeThatFits:(CGSize)size
{
return CGSizeMake(DOT_OUTSIDE_MARGIN*2.0f + DOT_WIDTH*3.0f + DOT_DISTANCE*2.0f, DOT_OUTSIDE_MARGIN*2.0f + DOT_WIDTH);
}
- (UIColor *)_lightDotColor
{
return [UIColor colorWithRed:(CGFloat)(238.0/255.0) green:(CGFloat)(128.0/255.0) blue:(CGFloat)(238.0/255.0) alpha:1.0];
}
- (UIColor *)_darkDotColor
{
return [UIColor colorWithRed:(CGFloat)(191.0/255.0) green:(CGFloat)(51.0/255.0) blue:(CGFloat)(191.0/255.0) alpha:1.0];
}
- (void)willMoveToSuperview:(UIView *)newSuperview
{
[super willMoveToSuperview:newSuperview];
[_phaseTimer invalidate];
_phaseTimer = nil;
if (newSuperview)
{
_phaseTimer = [NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(_phaseTimerTick:) userInfo:nil repeats:YES];
}
}
- (void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGRect dotRect = CGRectMake(DOT_OUTSIDE_MARGIN, 4, DOT_WIDTH, DOT_WIDTH);
if (_phase==0)
{
CGContextSetFillColorWithColor(ctx, [self _darkDotColor].CGColor);
}
else
{
CGContextSetFillColorWithColor(ctx, [self _lightDotColor].CGColor);
}
CGContextFillEllipseInRect(ctx, dotRect);
dotRect.origin.x = DOT_DISTANCE + CGRectGetMaxX(dotRect);
if (_phase==1)
{
CGContextSetFillColorWithColor(ctx, [self _darkDotColor].CGColor);
}
else
{
CGContextSetFillColorWithColor(ctx, [self _lightDotColor].CGColor);
}
CGContextFillEllipseInRect(ctx, dotRect);
dotRect.origin.x = DOT_DISTANCE + CGRectGetMaxX(dotRect);
if (_phase==2)
{
CGContextSetFillColorWithColor(ctx, [self _darkDotColor].CGColor);
}
else
{
CGContextSetFillColorWithColor(ctx, [self _lightDotColor].CGColor);
}
CGContextFillEllipseInRect(ctx, dotRect);
}
- (void)_phaseTimerTick:(id)sender
{
_phase = (_phase+1)%3;
[self setNeedsDisplay];
}
@end
#endif