mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
126 lines
5.0 KiB
Objective-C
126 lines
5.0 KiB
Objective-C
#import "TGLocationPinView.h"
|
|
|
|
#import "TGImageUtils.h"
|
|
#import "LegacyComponentsInternal.h"
|
|
|
|
#import "TGLocationMapViewController.h"
|
|
|
|
const CGSize TGLocationPinSize = { 13.5f, 36 };
|
|
const CGFloat TGLocationPinDamping = 2.0f;
|
|
const CGFloat TGLocationPinPinnedOrigin = 47;
|
|
const CGFloat TGLocationPinRaisedOrigin = 7;
|
|
const CGPoint TGLocationPinShadowPinnedOrigin = { 43, 47 };
|
|
const CGPoint TGLocationPinShadowRaisedOrigin = { 87, -33 };
|
|
|
|
@interface TGLocationPinView ()
|
|
{
|
|
UIImageView *_pinView;
|
|
UIImageView *_pinPointView;
|
|
UIImageView *_shadowView;
|
|
}
|
|
@end
|
|
|
|
@implementation TGLocationPinView
|
|
|
|
- (instancetype)init
|
|
{
|
|
self = [super initWithFrame:CGRectMake(0, 0, 100, 100)];
|
|
if (self != nil)
|
|
{
|
|
self.userInteractionEnabled = false;
|
|
|
|
_shadowView = [[UIImageView alloc] initWithFrame:CGRectMake(43, 47, 32, 39)];
|
|
_shadowView.alpha = 0.9f;
|
|
_shadowView.image = TGComponentsImageNamed(@"LocationPinShadow.png");
|
|
[self addSubview:_shadowView];
|
|
|
|
_pinPointView = [[UIImageView alloc] initWithFrame:CGRectMake(CGFloor(self.frame.size.width / 2 - 2), self.frame.size.height - 18.5f, 3.5f, 1.5f)];
|
|
_pinPointView.image = TGComponentsImageNamed(@"LocationPinPoint.png");
|
|
[self addSubview:_pinPointView];
|
|
|
|
_pinView = [[UIImageView alloc] initWithFrame:CGRectMake(CGFloor(self.frame.size.width / 2 - 7), 47, 13.5f, 36)];
|
|
_pinView.image = TGComponentsImageNamed(@"LocationPin.png");
|
|
[self addSubview:_pinView];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)setPallete:(TGLocationPallete *)pallete
|
|
{
|
|
_pallete = pallete;
|
|
|
|
_pinView.image = TGTintedImage(_pinView.image, pallete.locationColor);
|
|
_pinPointView.image = TGTintedImage(_pinPointView.image, pallete.locationColor);
|
|
}
|
|
|
|
- (void)setPinRaised:(bool)pinRaised
|
|
{
|
|
[self setPinRaised:pinRaised animated:false completion:nil];
|
|
}
|
|
|
|
- (void)setPinRaised:(bool)raised animated:(bool)animated completion:(void (^)(void))completion
|
|
{
|
|
_pinRaised = raised;
|
|
|
|
[_pinView.layer removeAllAnimations];
|
|
[_shadowView.layer removeAllAnimations];
|
|
|
|
if (animated)
|
|
{
|
|
if (raised)
|
|
{
|
|
[UIView animateWithDuration:0.2f delay:0.0f options:UIViewAnimationOptionBeginFromCurrentState animations:^
|
|
{
|
|
_pinView.frame = CGRectMake(_pinView.frame.origin.x, TGLocationPinRaisedOrigin, TGLocationPinSize.width, TGLocationPinSize.height);
|
|
_shadowView.frame = CGRectMake(TGLocationPinShadowRaisedOrigin.x, TGLocationPinShadowRaisedOrigin.y, _shadowView.frame.size.width, _shadowView.frame.size.height);
|
|
} completion:^(BOOL finished)
|
|
{
|
|
if (finished && completion != nil)
|
|
completion();
|
|
}];
|
|
}
|
|
else
|
|
{
|
|
[UIView animateWithDuration:0.2f delay:0.0f options:UIViewAnimationOptionBeginFromCurrentState animations:^
|
|
{
|
|
_pinView.frame = CGRectMake(_pinView.frame.origin.x, TGLocationPinPinnedOrigin, TGLocationPinSize.width, TGLocationPinSize.height);
|
|
_shadowView.frame = CGRectMake(TGLocationPinShadowPinnedOrigin.x, TGLocationPinShadowPinnedOrigin.y, _shadowView.frame.size.width, _shadowView.frame.size.height);
|
|
} completion:^(BOOL finished)
|
|
{
|
|
if (finished)
|
|
{
|
|
[UIView animateWithDuration:0.1f delay:0.0f options:UIViewAnimationOptionBeginFromCurrentState animations:^
|
|
{
|
|
_pinView.frame = CGRectMake(_pinView.frame.origin.x, TGLocationPinPinnedOrigin + TGLocationPinDamping, TGLocationPinSize.width, TGLocationPinSize.height - TGLocationPinDamping);
|
|
} completion:^(BOOL finished)
|
|
{
|
|
if (finished)
|
|
{
|
|
[UIView animateWithDuration:0.1f delay:0.0f options:UIViewAnimationOptionBeginFromCurrentState animations:^
|
|
{
|
|
_pinView.frame = CGRectMake(_pinView.frame.origin.x, TGLocationPinPinnedOrigin, TGLocationPinSize.width, TGLocationPinSize.height);
|
|
} completion:^(BOOL finished)
|
|
{
|
|
if (finished && completion != nil)
|
|
completion();
|
|
}];
|
|
}
|
|
}];
|
|
}
|
|
}];
|
|
}
|
|
}
|
|
else
|
|
{
|
|
_pinView.frame = CGRectMake(_pinView.frame.origin.x, raised ? TGLocationPinRaisedOrigin : TGLocationPinPinnedOrigin, TGLocationPinSize.width, TGLocationPinSize.height);
|
|
|
|
CGPoint shadowOrigin = raised ? TGLocationPinShadowRaisedOrigin : TGLocationPinShadowPinnedOrigin;
|
|
_shadowView.frame = CGRectMake(shadowOrigin.x, shadowOrigin.y, _shadowView.frame.size.width, _shadowView.frame.size.height);
|
|
|
|
if (completion != nil)
|
|
completion();
|
|
}
|
|
}
|
|
|
|
@end
|