1
0
mirror of https://github.com/danog/Telegram.git synced 2024-12-04 02:17:51 +01:00
Telegram/Share/TGProgressAlert.m
2016-02-25 01:03:51 +01:00

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