Files
RyukGram/modules/JGProgressHUD/JGProgressHUDIndicatorView.m
T

104 lines
2.4 KiB
Objective-C
Executable File

//
// JGProgressHUDIndicatorView.m
// JGProgressHUD
//
// Created by Jonas Gessner on 20.7.14.
// Copyright (c) 2014 Jonas Gessner. All rights reserved.
//
#import "JGProgressHUDIndicatorView.h"
#import "JGProgressHUD.h"
@interface JGProgressHUDIndicatorView () {
BOOL _accessibilityUpdateScheduled;
}
+ (void)runBlock:(void (^)(void))block;
@end
static void runOnNextRunLoop(void (^block)(void)) {
[[NSRunLoop currentRunLoop] performSelector:@selector(runBlock:) target:[JGProgressHUDIndicatorView class] argument:(id)block order:0 modes:@[NSRunLoopCommonModes]];
}
@implementation JGProgressHUDIndicatorView
#pragma mark - Initializers
- (instancetype)initWithFrame:(CGRect __unused)frame {
return [self init];
}
- (instancetype)init {
return [self initWithContentView:nil];
}
- (instancetype)initWithContentView:(UIView *)contentView {
self = [super initWithFrame:(contentView ? contentView.frame : CGRectMake(0.0, 0.0, 50.0, 50.0))];
if (self) {
self.opaque = NO;
self.backgroundColor = [UIColor clearColor];
self.isAccessibilityElement = YES;
[self setNeedsAccessibilityUpdate];
if (contentView) {
_contentView = contentView;
[self addSubview:self.contentView];
}
}
return self;
}
#pragma mark - Setup
- (void)setUpForHUDStyle:(JGProgressHUDStyle)style vibrancyEnabled:(BOOL)vibrancyEnabled {}
#pragma mark - Accessibility
+ (void)runBlock:(void (^)(void))block {
if (block != nil) {
block();
}
}
- (void)setNeedsAccessibilityUpdate {
if (!_accessibilityUpdateScheduled) {
_accessibilityUpdateScheduled = YES;
runOnNextRunLoop(^{
[self updateAccessibilityIfNeeded];
});
}
}
- (void)updateAccessibilityIfNeeded {
if (_accessibilityUpdateScheduled) {
[self updateAccessibility];
_accessibilityUpdateScheduled = NO;
}
}
- (void)updateAccessibility {
self.accessibilityLabel = [NSLocalizedString(@"Loading",) stringByAppendingFormat:@" %.f %%", self.progress];
}
#pragma mark - Getters & Setters
- (void)setProgress:(float)progress {
[self setProgress:progress animated:NO];
}
- (void)setProgress:(float)progress animated:(__unused BOOL)animated {
if (fequal(self.progress, progress)) {
return;
}
_progress = progress;
[self setNeedsAccessibilityUpdate];
}
@end