1
0
mirror of https://github.com/danog/Telegram.git synced 2024-12-04 10:27:46 +01:00
Telegram/legacy/TelegraphKit/TGCalloutView.m
2015-10-01 19:19:52 +03:00

162 lines
5.5 KiB
Objective-C

#import "TGCalloutView.h"
#import "TGImageUtils.h"
#import "TGFont.h"
@interface TGCalloutView ()
@property (nonatomic, strong) UIImageView *arrowView;
@property (nonatomic, strong) UIImageView *leftView;
@property (nonatomic, strong) UIImageView *centerView;
@property (nonatomic, strong) UIImageView *rightView;
@property (nonatomic, strong) UILabel *titleLabel;
@property (nonatomic, strong) UILabel *subtitleLabel;
@end
@implementation TGCalloutView
@synthesize arrowView = _arrowView;
@synthesize leftView = _leftView;
@synthesize centerView = _centerView;
@synthesize rightView = _rightView;
@synthesize titleLabel = _titleLabel;
@synthesize subtitleLabel = _subtitleLabel;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self != nil)
{
[self commonInit];
}
return self;
}
- (void)commonInit
{
UIImage *rawLeftImage = [UIImage imageNamed:@"MapCalloutLeft.png"];
UIImage *rawLeftHighlightedImage = [UIImage imageNamed:@"MapCalloutLeft_Highlighted.png"];
UIImage *rawRightImage = [UIImage imageNamed:@"MapCalloutRight.png"];
UIImage *rawRightHighlightedImage = [UIImage imageNamed:@"MapCalloutRight_Highlighted.png"];
UIImage *centerImage = [UIImage imageNamed:@"MapCalloutCenter.png"];
UIImage *centerHighlightedImage = [UIImage imageNamed:@"MapCalloutCenter_Highlighted.png"];
_leftView = [[UIImageView alloc] initWithImage:[rawLeftImage stretchableImageWithLeftCapWidth:(int)(rawLeftImage.size.width - 1) topCapHeight:0] highlightedImage:[rawLeftHighlightedImage stretchableImageWithLeftCapWidth:(int)(rawLeftHighlightedImage.size.width - 1) topCapHeight:0]];
[self addSubview:_leftView];
_rightView = [[UIImageView alloc] initWithImage:[rawRightImage stretchableImageWithLeftCapWidth:1 topCapHeight:0] highlightedImage:[rawRightHighlightedImage stretchableImageWithLeftCapWidth:1 topCapHeight:0]];
[self addSubview:_rightView];
_centerView = [[UIImageView alloc] initWithImage:centerImage highlightedImage:centerHighlightedImage];
[self addSubview:_centerView];
_arrowView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MapCalloutArrow.png"]];
[self addSubview:_arrowView];
_subtitleLabel = [[UILabel alloc] init];
_subtitleLabel.font = TGSystemFontOfSize(12);
_subtitleLabel.textColor = TGAccentColor();
_subtitleLabel.backgroundColor = [UIColor clearColor];
[self addSubview:_subtitleLabel];
_titleLabel = [[UILabel alloc] init];
_titleLabel.font = TGSystemFontOfSize(15);
_titleLabel.textColor = [UIColor blackColor];
_titleLabel.backgroundColor = [UIColor clearColor];
[self addSubview:_titleLabel];
}
- (void)sizeToFit
{
CGRect frame = self.frame;
[_titleLabel sizeToFit];
[_subtitleLabel sizeToFit];
CGFloat labelsWidth = MAX(_titleLabel.frame.size.width, _subtitleLabel.frame.size.width) + 30 + 13;
frame.size.width = MIN(300, MAX(MAX(_leftView.image.size.width + _rightView.image.size.width + _centerView.image.size.width, labelsWidth), 194));
frame.size.height = _leftView.image.size.height;
self.frame = frame;
}
- (void)setTitleText:(NSString *)titleText
{
[_titleLabel setText:titleText];
}
- (void)setSubtitleText:(NSString *)subtitleText
{
[_subtitleLabel setText:subtitleText];
}
- (void)setHighlighted:(BOOL)highlighted
{
[super setHighlighted:highlighted];
_leftView.highlighted = highlighted;
_rightView.highlighted = highlighted;
_centerView.highlighted = highlighted;
}
- (void)layoutSubviews
{
[super layoutSubviews];
CGSize viewSize = self.frame.size;
_centerView.frame = CGRectMake(CGFloor((viewSize.width - _centerView.image.size.width) / 2), 0, _centerView.image.size.width, viewSize.height);
_leftView.frame = CGRectMake(0, 0, _centerView.frame.origin.x, viewSize.height);
_rightView.frame = CGRectMake(_centerView.frame.origin.x + _centerView.frame.size.width, 0, viewSize.width - (_centerView.frame.origin.x + _centerView.frame.size.width), viewSize.height);
_arrowView.frame = CGRectMake(viewSize.width - _arrowView.frame.size.width - 11, 18, _arrowView.frame.size.width, _arrowView.frame.size.height);
if (_subtitleLabel.text.length == 0)
{
_titleLabel.frame = CGRectMake(13, 15, viewSize.width - 30 - 12, _titleLabel.frame.size.height);
_subtitleLabel.frame = CGRectMake(13, 14, viewSize.width - 30 - 12, _subtitleLabel.frame.size.height);
_subtitleLabel.alpha = 0.0f;
}
else
{
_titleLabel.frame = CGRectMake(13, 7, viewSize.width - 30 - 12, _titleLabel.frame.size.height);
_subtitleLabel.frame = CGRectMake(13, 27, viewSize.width - 30 - 12, _subtitleLabel.frame.size.height);
_subtitleLabel.alpha = 1.0f;
}
}
- (void)cancelDoubleTap:(UIView *)view
{
for (UIGestureRecognizer *recognizer in view.gestureRecognizers)
{
if ([recognizer isKindOfClass:[UITapGestureRecognizer class]] && ((UITapGestureRecognizer *)recognizer).numberOfTapsRequired == 2)
{
if (recognizer.enabled)
{
recognizer.enabled = false;
recognizer.enabled = true;
}
}
}
if (view.superview != nil)
[self cancelDoubleTap:view.superview];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
if (iosMajorVersion() >= 6)
[self cancelDoubleTap:self.superview];
[super touchesBegan:touches withEvent:event];
}
@end