mirror of
https://github.com/danog/Telegram.git
synced 2024-12-04 18:37:47 +01:00
162 lines
5.5 KiB
Mathematica
162 lines
5.5 KiB
Mathematica
|
#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
|