forked from ish-app/ish
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ProgressReportViewController.m
81 lines (65 loc) · 2.08 KB
/
ProgressReportViewController.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
//
// ProgressReportViewController.m
// iSH
//
// Created by Theodore Dubois on 6/18/20.
//
#import "ProgressReportViewController.h"
@interface ProgressReportViewController ()
@property (weak, nonatomic) IBOutlet UIView *popupView;
@property (weak, nonatomic) IBOutlet UIVisualEffectView *backdrop;
@property (weak, nonatomic) IBOutlet UILabel *titleLabel;
@property (weak, nonatomic) IBOutlet UILabel *statusLabel;
@property (weak, nonatomic) IBOutlet UIProgressView *bar;
@property (weak, nonatomic) IBOutlet UIButton *cancelButton;
@property (nonatomic) double progress;
@property (nonatomic) NSString *message;
@property (nonatomic) BOOL cancelled;
@property CADisplayLink *timer;
@end
@implementation ProgressReportViewController
- (void)viewDidLoad {
self.titleLabel.text = self.title;
if (@available(iOS 13, *)) {
self.backdrop.effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleSystemMaterial];
}
}
- (void)viewDidLayoutSubviews {
CAShapeLayer *mask = [CAShapeLayer new];
mask.path = [UIBezierPath bezierPathWithRoundedRect:self.popupView.bounds cornerRadius:13].CGPath;
self.popupView.layer.mask = mask;
self.popupView.layer.masksToBounds = YES;
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.timer = [CADisplayLink displayLinkWithTarget:self selector:@selector(update)];
[self.timer addToRunLoop:NSRunLoop.mainRunLoop forMode:NSRunLoopCommonModes];
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[self.timer invalidate];
}
- (void)updateProgress:(double)progressFraction message:(NSString *)progressMessage {
@synchronized (self) {
_progress = progressFraction;
_message = progressMessage;
}
}
- (BOOL)shouldCancel {
@synchronized (self) {
return _cancelled;
}
}
- (void)update {
@synchronized (self) {
self.bar.progress = _progress;
self.statusLabel.text = _message;
}
}
- (IBAction)cancel:(id)sender {
@synchronized (self) {
self.cancelled = YES;
self.cancelButton.enabled = NO;
}
}
@end