react-native-camera-kit/ios/lib/ReactNativeCameraKit/CKCameraOverlayView.m

109 lines
3.8 KiB
Objective-C

//
// CKCameraOverlayView.m
// ReactNativeCameraKit
//
// Created by Ran Greenberg on 17/07/2016.
// Copyright © 2016 Wix. All rights reserved.
//
#import "CKCameraOverlayView.h"
@interface CKCameraOverlayView ()
@property (nonatomic, strong, readwrite) CKOverlayObject *overlayObject;
@property (nonatomic, strong) UIView *topView;
@property (nonatomic, strong, readwrite) UIView *centerView;
@property (nonatomic, strong) UIView *bottomView;
@end
@implementation CKCameraOverlayView
-(instancetype)initWithFrame:(CGRect)frame ratioString:(NSString*)ratioString overlayColor:(UIColor*)overlayColor {
self = [super initWithFrame:frame];
if (self) {
self.overlayObject = [[CKOverlayObject alloc] initWithString:ratioString];
self.topView = [[UIView alloc] initWithFrame:CGRectZero];
self.centerView = [[UIView alloc] initWithFrame:CGRectZero];
self.bottomView = [[UIView alloc] initWithFrame:CGRectZero];
overlayColor = overlayColor ? overlayColor : [UIColor colorWithRed:0 green:0 blue:0 alpha:0.3];
self.topView.backgroundColor = overlayColor;
self.bottomView.backgroundColor = overlayColor;
[self addSubview:self.topView];
[self addSubview:self.centerView];
[self addSubview:self.bottomView];
[self setOverlayParts];
}
return self;
}
-(void)setOverlayParts {
if (self.overlayObject.ratio == 0) return;
CGSize centerSize = CGSizeZero;
CGSize sideSize = CGSizeZero;
if (self.overlayObject.width < self.overlayObject.height) {
centerSize.width = self.frame.size.width;
centerSize.height = self.frame.size.height * self.overlayObject.ratio;
sideSize.width = centerSize.width;
sideSize.height = (self.frame.size.height - centerSize.height)/2.0;
self.topView.frame = CGRectMake(0, 0, sideSize.width, sideSize.height);
self.centerView.frame = CGRectMake(0, self.topView.frame.size.height + self.topView.frame.origin.y, centerSize.width, centerSize.height);
self.bottomView.frame = CGRectMake(0, self.centerView.frame.size.height + self.centerView.frame.origin.y, sideSize.width, sideSize.height);
}
else if (self.overlayObject.width > self.overlayObject.height){
centerSize.width = self.frame.size.width / self.overlayObject.ratio;
centerSize.height = self.frame.size.height;
sideSize.width = (self.frame.size.width - centerSize.width)/2.0;
sideSize.height = centerSize.height;
self.topView.frame = CGRectMake(0, 0, sideSize.width, sideSize.height);
self.centerView.frame = CGRectMake(self.topView.frame.size.width + self.topView.frame.origin.x, 0, centerSize.width, centerSize.height);
self.bottomView.frame = CGRectMake(self.centerView.frame.size.width + self.centerView.frame.origin.x, 0, sideSize.width, sideSize.height);
}
else { // ratio is 1:1
centerSize.width = self.frame.size.width;
centerSize.height = self.frame.size.width;
sideSize.width = centerSize.width;
sideSize.height = (self.frame.size.height - centerSize.height)/2.0;
self.topView.frame = CGRectMake(0, 0, sideSize.width, sideSize.height);
self.centerView.frame = CGRectMake(0, self.topView.frame.size.height + self.topView.frame.origin.y, centerSize.width, centerSize.height);
self.bottomView.frame = CGRectMake(0, self.centerView.frame.size.height + self.centerView.frame.origin.y, sideSize.width, sideSize.height);
}
}
-(void)setRatio:(NSString*)ratioString {
self.overlayObject = [[CKOverlayObject alloc] initWithString:ratioString];
// self.alpha =0;
[UIView animateWithDuration:0.2 animations:^{
[self setOverlayParts];
} completion:nil];
}
@end