1
0
mirror of https://github.com/danog/Telegram.git synced 2024-12-02 09:27:55 +01:00
Telegram/Share/TGShareToolbarView.m
2016-02-25 01:03:51 +01:00

293 lines
10 KiB
Objective-C

#import "TGShareToolbarView.h"
#import "TGColor.h"
#import "TGShareToolbarButton.h"
@interface TGShareToolbarView ()
{
UIView *_wrapperView;
TGShareButton *_leftButton;
TGShareButton *_rightButton;
UIView *_buttonsWrapperView;
TGShareToolbarTab _currentTabs;
}
@end
@implementation TGShareToolbarView
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self != nil)
{
self.backgroundColor = [UIColor clearColor];
_wrapperView = [[UIView alloc] initWithFrame:self.bounds];
_wrapperView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
_wrapperView.backgroundColor = TGColorWithHex(0xf7f7f7);
[self addSubview:_wrapperView];
UIView *stripeView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.frame.size.width, 0.5f)];
stripeView.backgroundColor = TGColorWithHex(0xb2b2b2);
stripeView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
[_wrapperView addSubview:stripeView];
_buttonsWrapperView = [[UIView alloc] initWithFrame:self.bounds];
_buttonsWrapperView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[_wrapperView addSubview:_buttonsWrapperView];
_leftButton = [[TGShareButton alloc] initWithFrame:CGRectMake(0, 0, 60, 44)];
_leftButton.exclusiveTouch = true;
[_leftButton setTitle:NSLocalizedString(@"Share.Cancel", nil) forState:UIControlStateNormal];
[_leftButton setTitleColor:TGColorWithHex(0x007ee5)];
_leftButton.titleLabel.font = [UIFont systemFontOfSize:17];
_leftButton.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
[_leftButton sizeToFit];
_leftButton.frame = CGRectMake(0, 0, MAX(60, _leftButton.frame.size.width), 44);
_leftButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
[_leftButton addTarget:self action:@selector(leftButtonPressed) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:_leftButton];
_rightButton = [[TGShareButton alloc] initWithFrame:CGRectMake(0, 0, 40, 44)];
_rightButton.exclusiveTouch = true;
[_rightButton setTitle:NSLocalizedString(@"Share.Done", nil) forState:UIControlStateNormal];
[_rightButton setTitleColor:TGColorWithHex(0x007ee5)];
_rightButton.titleLabel.font = [UIFont systemFontOfSize:17 weight:UIFontWeightMedium];
_rightButton.contentEdgeInsets = UIEdgeInsetsMake(0, 27, 0, 10);
[_rightButton sizeToFit];
CGFloat doneButtonWidth = MAX(40, _rightButton.frame.size.width);
_rightButton.frame = CGRectMake(self.frame.size.width - doneButtonWidth, 0, doneButtonWidth, 44);
_rightButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight;
[_rightButton addTarget:self action:@selector(rightButtonPressed) forControlEvents:UIControlEventTouchUpInside];
_rightButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
[_wrapperView addSubview:_rightButton];
}
return self;
}
- (void)leftButtonPressed
{
if (self.leftPressed != nil)
self.leftPressed();
}
- (void)rightButtonPressed
{
if (self.rightPressed != nil)
self.rightPressed();
}
- (void)setHidden:(bool)hidden animated:(bool)animated
{
self.userInteractionEnabled = !hidden;
void (^changeBlock)(void) = ^
{
if (hidden)
_wrapperView.frame = CGRectMake(0, _wrapperView.frame.size.height, _wrapperView.frame.size.width, _wrapperView.frame.size.height);
else
_wrapperView.frame = CGRectMake(0, 0, _wrapperView.frame.size.width, _wrapperView.frame.size.height);
};
void (^completionBlock)(BOOL) = ^(BOOL finished)
{
_wrapperView.hidden = hidden;
};
if (animated)
{
if (!hidden)
_wrapperView.hidden = false;
UIViewAnimationOptions options = hidden ? UIViewAnimationOptionCurveEaseInOut : (7 << 16);
[UIView animateWithDuration:0.3 delay:0.0 options:options animations:changeBlock completion:completionBlock];
}
else
{
changeBlock();
completionBlock(true);
}
}
#pragma mark -
- (void)_setTitle:(NSString *)title forButton:(TGShareButton *)button
{
NSString *currentTitle = [button titleForState:UIControlStateNormal];
if ([currentTitle isEqualToString:title])
return;
button.userInteractionEnabled = (title.length > 0);
if (currentTitle.length == 0 && title.length > 0)
{
button.alpha = 0.0f;
[button setTitle:title forState:UIControlStateNormal];
[UIView animateWithDuration:0.15 animations:^
{
button.alpha = 1.0f;
}];
}
else if (currentTitle.length > 0 && title.length == 0)
{
[UIView animateWithDuration:0.15 animations:^
{
button.alpha = 0.0f;
} completion:^(BOOL finished)
{
if (finished)
[button setTitle:title forState:UIControlStateNormal];
}];
}
else
{
[button setTitle:title forState:UIControlStateNormal];
}
}
- (NSString *)leftButtonTitle
{
return [_leftButton titleForState:UIControlStateNormal];
}
- (void)setLeftButtonTitle:(NSString *)title
{
[self _setTitle:title forButton:_leftButton];
}
- (NSString *)rightButtonTitle
{
return [_rightButton titleForState:UIControlStateNormal];
}
- (void)setRightButtonTitle:(NSString *)title
{
[self _setTitle:title forButton:_rightButton];
}
- (void)setRightButtonHidden:(bool)hidden
{
_rightButton.hidden = hidden;
}
- (void)setRightButtonEnabled:(bool)enabled animated:(bool)__unused animated
{
_rightButton.enabled = enabled;
}
- (void)setToolbarTabs:(TGShareToolbarTab)tabs animated:(bool)animated
{
if (tabs == _currentTabs)
return;
UIView *transitionView = nil;
if (_currentTabs != TGShareToolbarTabNone)
{
transitionView = [_buttonsWrapperView snapshotViewAfterScreenUpdates:false];
transitionView.frame = _buttonsWrapperView.frame;
[_buttonsWrapperView.superview addSubview:transitionView];
}
_currentTabs = tabs;
NSArray *buttons = [_buttonsWrapperView.subviews copy];
for (UIView *view in buttons)
[view removeFromSuperview];
if (_currentTabs & TGShareToolbarTabCaption)
[_buttonsWrapperView addSubview:[TGShareToolbarView buttonForTab:TGShareToolbarTabCaption]];
if (_currentTabs & TGShareToolbarTabCrop)
[_buttonsWrapperView addSubview:[TGShareToolbarView buttonForTab:TGShareToolbarTabCrop]];
if (_currentTabs & TGShareToolbarTabAdjustments)
[_buttonsWrapperView addSubview:[TGShareToolbarView buttonForTab:TGShareToolbarTabAdjustments]];
if (_currentTabs & TGShareToolbarTabRotate)
[_buttonsWrapperView addSubview:[TGShareToolbarView buttonForTab:TGShareToolbarTabRotate]];
[self setNeedsLayout];
_buttonsWrapperView.alpha = 0.0f;
[UIView animateWithDuration:0.15 animations:^
{
_buttonsWrapperView.alpha = 1.0f;
transitionView.alpha = 0.0f;
} completion:^(BOOL finished)
{
[transitionView removeFromSuperview];
}];
}
#pragma mark -
+ (TGShareToolbarButton *)buttonForTab:(TGShareToolbarTab)tab
{
TGShareToolbarButton *button = [[TGShareToolbarButton alloc] initWithFrame:CGRectMake(0, 0, 28, 28)];
button.tag = tab;
switch (tab)
{
case TGShareToolbarTabCaption:
button.iconImage = [UIImage imageNamed:@"PhotoEditorCaption"];
break;
case TGShareToolbarTabCrop:
button.iconImage = [UIImage imageNamed:@"PhotoEditorCrop"];
break;
case TGShareToolbarTabAdjustments:
button.iconImage = [UIImage imageNamed:@"PhotoEditorTools"];
break;
case TGShareToolbarTabRotate:
button.iconImage = [UIImage imageNamed:@"PhotoEdtorRotate"];
break;
default:
button = nil;
break;
}
return button;
}
#pragma mark -
- (void)layoutSubviews
{
[super layoutSubviews];
NSArray *buttons = _buttonsWrapperView.subviews;
if (buttons.count == 1)
{
UIView *button = buttons.firstObject;
button.frame = CGRectMake(floor(self.frame.size.width / 2 - button.frame.size.width / 2), (self.frame.size.height - button.frame.size.height) / 2, button.frame.size.width, button.frame.size.height);
}
else if (buttons.count == 2)
{
UIView *leftButton = buttons.firstObject;
UIView *rightButton = buttons.lastObject;
leftButton.frame = CGRectMake(floor(self.frame.size.width / 5 * 2 - 5 - leftButton.frame.size.width / 2), (self.frame.size.height - leftButton.frame.size.height) / 2, leftButton.frame.size.width, leftButton.frame.size.height);
rightButton.frame = CGRectMake(floor(self.frame.size.width - leftButton.frame.origin.x - rightButton.frame.size.width), (self.frame.size.height - rightButton.frame.size.height) / 2, rightButton.frame.size.width, rightButton.frame.size.height);
}
else if (buttons.count == 3)
{
UIView *leftButton = buttons.firstObject;
UIView *centerButton = [buttons objectAtIndex:1];
UIView *rightButton = buttons.lastObject;
centerButton.frame = CGRectMake(floor(self.frame.size.width / 2 - centerButton.frame.size.width / 2), (self.frame.size.height - centerButton.frame.size.height) / 2, centerButton.frame.size.width, centerButton.frame.size.height);
leftButton.frame = CGRectMake(floor(self.frame.size.width / 6 * 2 - 5 - leftButton.frame.size.width / 2), (self.frame.size.height - leftButton.frame.size.height) / 2, leftButton.frame.size.width, leftButton.frame.size.height);
rightButton.frame = CGRectMake(floor(self.frame.size.width - leftButton.frame.origin.x - rightButton.frame.size.width), (self.frame.size.height - rightButton.frame.size.height) / 2, rightButton.frame.size.width, rightButton.frame.size.height);
}
}
@end