mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
103 lines
2.8 KiB
Objective-C
103 lines
2.8 KiB
Objective-C
#import "TGCameraRectangleView.h"
|
|
#import "TGCameraInterfaceAssets.h"
|
|
#import "LegacyComponentsInternal.h"
|
|
#import "TGImageUtils.h"
|
|
|
|
#import "TGCameraPreviewView.h"
|
|
#import "PGRectangleDetector.h"
|
|
|
|
@interface TGCameraRectangleView ()
|
|
{
|
|
CAShapeLayer *_quadLayer;
|
|
|
|
bool _clearing;
|
|
}
|
|
@end
|
|
|
|
@implementation TGCameraRectangleView
|
|
|
|
- (instancetype)initWithFrame:(CGRect)frame
|
|
{
|
|
self = [super initWithFrame:frame];
|
|
if (self != nil) {
|
|
_enabled = true;
|
|
|
|
self.backgroundColor = [UIColor clearColor];
|
|
self.alpha = 0.0f;
|
|
|
|
_quadLayer = [[CAShapeLayer alloc] init];
|
|
_quadLayer.strokeColor = [[TGCameraInterfaceAssets accentColor] colorWithAlphaComponent:0.7].CGColor;
|
|
_quadLayer.fillColor = [[TGCameraInterfaceAssets accentColor] colorWithAlphaComponent:0.45].CGColor;
|
|
_quadLayer.lineWidth = 2.0;
|
|
|
|
[self.layer addSublayer:_quadLayer];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (CGPathRef)pathForRectangle:(PGRectangle *)rectangle
|
|
{
|
|
CGAffineTransform transform = CGAffineTransformMakeScale(self.previewView.frame.size.width, self.previewView.frame.size.height);
|
|
PGRectangle *displayRectangle = [[rectangle rotate90] transform:transform];
|
|
|
|
UIBezierPath *path = [[UIBezierPath alloc] init];
|
|
[path moveToPoint:displayRectangle.topLeft];
|
|
[path addLineToPoint:displayRectangle.topRight];
|
|
[path addLineToPoint:displayRectangle.bottomRight];
|
|
[path addLineToPoint:displayRectangle.bottomLeft];
|
|
[path closePath];
|
|
return path.CGPath;
|
|
}
|
|
|
|
- (void)drawRectangle:(PGRectangle *)rectangle
|
|
{
|
|
if (!_enabled) {
|
|
return;
|
|
}
|
|
|
|
if (rectangle == nil) {
|
|
[self clear];
|
|
return;
|
|
}
|
|
|
|
_clearing = false;
|
|
[self.layer removeAllAnimations];
|
|
|
|
bool animated = _quadLayer.path != nil;
|
|
if (animated) {
|
|
CAAnimation *animation = [CABasicAnimation animationWithKeyPath:@"path"];
|
|
animation.duration = 0.2;
|
|
[_quadLayer addAnimation:animation forKey:@"path"];
|
|
} else {
|
|
self.transform = CGAffineTransformMakeScale(1.1, 1.1);
|
|
[UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionAllowAnimatedContent animations:^{
|
|
self.transform = CGAffineTransformIdentity;
|
|
self.alpha = 1.0f;
|
|
} completion:nil];
|
|
}
|
|
_quadLayer.path = [self pathForRectangle:rectangle];
|
|
}
|
|
|
|
- (void)clear
|
|
{
|
|
if (_quadLayer.path == nil || _clearing)
|
|
return;
|
|
|
|
_clearing = true;
|
|
[UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionAllowAnimatedContent animations:^{
|
|
self.alpha = 0.0f;
|
|
} completion:^(BOOL finished) {
|
|
if (_clearing) {
|
|
_quadLayer.path = nil;
|
|
_clearing = false;
|
|
}
|
|
}];
|
|
}
|
|
|
|
- (void)layoutSubviews
|
|
{
|
|
_quadLayer.frame = self.bounds;
|
|
}
|
|
|
|
@end
|