mirror of
https://github.com/danog/Telegram.git
synced 2024-12-04 02:17:51 +01:00
133 lines
5.1 KiB
Objective-C
133 lines
5.1 KiB
Objective-C
#import "TGProgressAlert.h"
|
|
|
|
#import "TGColor.h"
|
|
|
|
@interface TGProgressAlert ()
|
|
{
|
|
UIView *_dimView;
|
|
UIView *_backgroundView;
|
|
UILabel *_textLabel;
|
|
UIView *_progressView;
|
|
UIView *_separatorView;
|
|
UIButton *_cancelButton;
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation TGProgressAlert
|
|
|
|
- (instancetype)initWithFrame:(CGRect)frame
|
|
{
|
|
self = [super initWithFrame:frame];
|
|
if (self != nil)
|
|
{
|
|
_dimView = [[UIView alloc] init];
|
|
_dimView.backgroundColor = [UIColor colorWithWhite:0.0f alpha:0.2f];
|
|
[self addSubview:_dimView];
|
|
|
|
static UIImage *backgroundImage = nil;
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^
|
|
{
|
|
CGFloat radius = 8.0f;
|
|
UIGraphicsBeginImageContextWithOptions(CGSizeMake(radius * 2.0f, radius * 2.0f), false, 0.0f);
|
|
CGContextRef context = UIGraphicsGetCurrentContext();
|
|
CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);
|
|
CGContextFillEllipseInRect(context, CGRectMake(0.0f, 0.0f, radius * 2.0f, radius * 2.0f));
|
|
backgroundImage = [UIGraphicsGetImageFromCurrentImageContext() stretchableImageWithLeftCapWidth:(NSInteger)radius topCapHeight:(NSInteger)radius];
|
|
UIGraphicsEndImageContext();
|
|
});
|
|
_backgroundView = [[UIImageView alloc] initWithImage:backgroundImage];
|
|
[self addSubview:_backgroundView];
|
|
|
|
_textLabel = [[UILabel alloc] init];
|
|
_textLabel.backgroundColor = [UIColor clearColor];
|
|
_textLabel.textColor = [UIColor blackColor];
|
|
_textLabel.font = [UIFont boldSystemFontOfSize:18.0f];
|
|
[self addSubview:_textLabel];
|
|
|
|
_separatorView = [[UIView alloc] init];
|
|
_separatorView.backgroundColor = TGColorWithHex(0xcccccc);
|
|
[self addSubview:_separatorView];
|
|
|
|
_progressView = [[UIView alloc] init];
|
|
_progressView.backgroundColor = TGColorWithHex(0x007ee5);
|
|
[self addSubview:_progressView];
|
|
|
|
_cancelButton = [[UIButton alloc] init];
|
|
NSString *cancelText = NSLocalizedString(@"Common.Cancel", nil);
|
|
if (cancelText.length == 0 || [cancelText isEqualToString:@"Common.Cancel"]) {
|
|
cancelText = NSLocalizedString(@"Share.Cancel", nil);
|
|
}
|
|
|
|
[_cancelButton setTitle:cancelText forState:UIControlStateNormal];
|
|
[_cancelButton addTarget:self action:@selector(cancelPressed) forControlEvents:UIControlEventTouchUpInside];
|
|
[_cancelButton setTitleColor:TGColorWithHex(0x007ee5) forState:UIControlStateNormal];
|
|
[_cancelButton setTitleColor:[TGColorWithHex(0x007ee5) colorWithAlphaComponent:0.6f] forState:UIControlStateHighlighted];
|
|
[self addSubview:_cancelButton];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)cancelPressed
|
|
{
|
|
if (_cancel)
|
|
_cancel();
|
|
}
|
|
|
|
- (void)setText:(NSString *)text
|
|
{
|
|
_text = text;
|
|
_textLabel.text = text;
|
|
[self setNeedsLayout];
|
|
}
|
|
|
|
- (void)setProgress:(CGFloat)progress
|
|
{
|
|
[self setProgress:progress animated:false];
|
|
}
|
|
|
|
- (void)setProgress:(CGFloat)progress animated:(bool)animated
|
|
{
|
|
_progress = progress;
|
|
|
|
CGRect progressFrame = CGRectMake(_separatorView.frame.origin.x, _separatorView.frame.origin.y - 2.0f + _separatorView.frame.size.height, (CGFloat)(floor(_separatorView.frame.size.width * _progress * 2.0f) / 2.0f), 2.0f);
|
|
if (!CGRectEqualToRect(progressFrame, _progressView.frame))
|
|
{
|
|
if (animated)
|
|
{
|
|
[UIView animateWithDuration:0.4 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^
|
|
{
|
|
_progressView.frame = progressFrame;
|
|
} completion:nil];
|
|
}
|
|
else
|
|
{
|
|
_progressView.frame = progressFrame;
|
|
}
|
|
}
|
|
}
|
|
|
|
- (void)layoutSubviews
|
|
{
|
|
[super layoutSubviews];
|
|
|
|
_dimView.frame = self.bounds;
|
|
|
|
CGSize backgroundSize = CGSizeMake(270.0f, 102.0f);
|
|
|
|
_backgroundView.frame = CGRectMake((self.frame.size.width - backgroundSize.width) / 2.0f, (self.frame.size.height - backgroundSize.height) / 2.0f, backgroundSize.width, backgroundSize.height);
|
|
CGFloat separatorHeight = 1.0f / [UIScreen mainScreen].scale;
|
|
_separatorView.frame = CGRectMake(_backgroundView.frame.origin.x, _backgroundView.frame.origin.y + 57.0f + separatorHeight, _backgroundView.frame.size.width, separatorHeight);
|
|
|
|
CGRect progressFrame = CGRectMake(_separatorView.frame.origin.x, _separatorView.frame.origin.y + separatorHeight - 2.0f, (CGFloat)(floor(_separatorView.frame.size.width * _progress * 2.0f) / 2.0f), 2.0f);
|
|
if (!CGRectEqualToRect(progressFrame, _progressView.frame))
|
|
_progressView.frame = progressFrame;
|
|
|
|
[_textLabel sizeToFit];
|
|
_textLabel.frame = CGRectMake(_backgroundView.frame.origin.x + (_backgroundView.frame.size.width - _textLabel.frame.size.width) / 2.0f, _backgroundView.frame.origin.y + 18.0f, _textLabel.frame.size.width, _textLabel.frame.size.height);
|
|
_cancelButton.frame = CGRectMake(_backgroundView.frame.origin.x, _backgroundView.frame.origin.y + _backgroundView.frame.size.height - 45.0f, _backgroundView.frame.size.width, 45.0f);
|
|
}
|
|
|
|
@end
|