|
@@ -16,7 +16,7 @@
|
|
|
#import "CSignatureTopBar.h"
|
|
|
#import "CSignatureDrawView.h"
|
|
|
|
|
|
-@interface CPDFSignatureEditViewController () <CSignatureTopBarDelegate, CPDFColorSelectViewDelegate, UIPopoverPresentationControllerDelegate, UINavigationControllerDelegate, UIImagePickerControllerDelegate>
|
|
|
+@interface CPDFSignatureEditViewController () <UIPopoverPresentationControllerDelegate, UINavigationControllerDelegate, UIImagePickerControllerDelegate, CPDFColorSelectViewDelegate, CPDFColorPickerViewDelegate>
|
|
|
|
|
|
@property (nonatomic, strong) CPDFColorSelectView *colorSelectView;
|
|
|
|
|
@@ -24,14 +24,20 @@
|
|
|
|
|
|
@property (nonatomic, strong) UIButton *saveButton;
|
|
|
|
|
|
-@property (nonatomic, strong) CSignatureTopBar *topBar;
|
|
|
+@property (nonatomic, strong) UISegmentedControl *segmentedControl;
|
|
|
|
|
|
-@property (nonatomic, strong) CSignatureDrawView *signatureDrawView;
|
|
|
+@property (nonatomic, strong) CSignatureDrawView *signatureDrawTextView;
|
|
|
+
|
|
|
+@property (nonatomic, strong) CSignatureDrawView *signatureDrawImageView;
|
|
|
+
|
|
|
+@property (nonatomic, strong) CPDFColorPickerView *colorPicker;
|
|
|
|
|
|
@property (nonatomic, strong) UITextField *textField;
|
|
|
|
|
|
@property (nonatomic, strong) CALayer *bottomBorder;
|
|
|
|
|
|
+@property (nonatomic, strong) UIButton *createButton;
|
|
|
+
|
|
|
@property (nonatomic, assign) CSignatureTopBarSelectedIndex selecIndex;
|
|
|
|
|
|
@end
|
|
@@ -45,14 +51,24 @@
|
|
|
// Do any additional setup after loading the view.
|
|
|
self.title = NSLocalizedString(@"Add Signature", nil);
|
|
|
|
|
|
- self.topBar = [[CSignatureTopBar alloc] init];
|
|
|
- self.topBar.delegate = self;
|
|
|
- [self.view addSubview:self.topBar];
|
|
|
+ NSArray *segmmentArray = [NSArray arrayWithObjects:NSLocalizedString(@"Draw", nil), NSLocalizedString(@"Text", nil), NSLocalizedString(@"Image", nil),nil];
|
|
|
+ _segmentedControl = [[UISegmentedControl alloc] initWithItems:segmmentArray];
|
|
|
+ _segmentedControl.selectedSegmentIndex = 0;
|
|
|
+ _segmentedControl.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
|
|
+ [_segmentedControl addTarget:self action:@selector(segmentedControlValueChanged_singature:) forControlEvents:UIControlEventValueChanged];
|
|
|
+ self.navigationItem.titleView = self.segmentedControl;
|
|
|
|
|
|
- self.signatureDrawView = [[CSignatureDrawView alloc] init];
|
|
|
- self.signatureDrawView.color = [UIColor blackColor];
|
|
|
- self.signatureDrawView.lineWidth = 4;
|
|
|
- [self.view addSubview:self.signatureDrawView];
|
|
|
+ self.signatureDrawTextView = [[CSignatureDrawView alloc] init];
|
|
|
+ self.signatureDrawTextView.color = [UIColor blackColor];
|
|
|
+ self.signatureDrawTextView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
|
|
|
+ self.signatureDrawTextView.lineWidth = 4;
|
|
|
+ [self.view addSubview:self.signatureDrawTextView];
|
|
|
+
|
|
|
+ self.signatureDrawImageView = [[CSignatureDrawView alloc] init];
|
|
|
+ self.signatureDrawImageView.color = [UIColor blackColor];
|
|
|
+ self.signatureDrawImageView.lineWidth = 4;
|
|
|
+ [self.view addSubview:self.signatureDrawImageView];
|
|
|
+ self.signatureDrawImageView.hidden = YES;
|
|
|
|
|
|
self.colorSelectView = [[CPDFColorSelectView alloc] initWithFrame:CGRectMake(0, 550, self.view.frame.size.width, 90)];
|
|
|
self.colorSelectView.delegate = self;
|
|
@@ -61,23 +77,17 @@
|
|
|
|
|
|
self.cacelButon = [[UIButton alloc] init];
|
|
|
[self.cacelButon setTitle:NSLocalizedString(@"Cancel", nil) forState:UIControlStateNormal];
|
|
|
- self.cacelButon.layer.borderColor = [UIColor purpleColor].CGColor;
|
|
|
- self.cacelButon.layer.borderWidth = 1.0;
|
|
|
- self.cacelButon.layer.cornerRadius = 10.0;
|
|
|
- self.cacelButon.layer.masksToBounds = YES;
|
|
|
[self.cacelButon setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
|
|
|
[self.cacelButon addTarget:self action:@selector(buttonItemClicked_Cancel:) forControlEvents:UIControlEventTouchUpInside];
|
|
|
- [self.view addSubview:self.cacelButon];
|
|
|
+ UIBarButtonItem *cancelItem = [[UIBarButtonItem alloc] initWithCustomView:self.cacelButon];
|
|
|
+ self.navigationItem.leftBarButtonItem = cancelItem;
|
|
|
|
|
|
self.saveButton = [[UIButton alloc] init];
|
|
|
- [self.saveButton setTitle:NSLocalizedString(@"Save", nil) forState:UIControlStateNormal];
|
|
|
- self.saveButton.layer.borderColor = [UIColor purpleColor].CGColor;
|
|
|
- self.saveButton.layer.borderWidth = 1.0;
|
|
|
- self.saveButton.layer.cornerRadius = 10.0;
|
|
|
- self.saveButton.layer.masksToBounds = YES;
|
|
|
+ [self.saveButton setTitle:NSLocalizedString(@"Done", nil) forState:UIControlStateNormal];
|
|
|
[self.saveButton setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
|
|
|
[self.saveButton addTarget:self action:@selector(buttonItemClicked_Save:) forControlEvents:UIControlEventTouchUpInside];
|
|
|
- [self.view addSubview:self.saveButton];
|
|
|
+ UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithCustomView:self.saveButton];
|
|
|
+ self.navigationItem.rightBarButtonItem = doneItem;
|
|
|
|
|
|
self.bottomBorder = [CALayer layer];
|
|
|
self.bottomBorder.backgroundColor = [UIColor blackColor].CGColor;
|
|
@@ -88,70 +98,89 @@
|
|
|
[self.textField.layer addSublayer:self.bottomBorder];
|
|
|
self.textField.hidden = YES;
|
|
|
|
|
|
+ self.createButton = [[UIButton alloc] init];
|
|
|
+ self.createButton.layer.cornerRadius = 25.0;
|
|
|
+ self.createButton.clipsToBounds = YES;
|
|
|
+ [self.createButton setImage:[UIImage imageNamed:@"CPDFSignatureImageAdd" inBundle:[NSBundle bundleForClass:self.class] compatibleWithTraitCollection:nil] forState:UIControlStateNormal];
|
|
|
+ self.createButton.backgroundColor = [UIColor blueColor];
|
|
|
+ [self.createButton addTarget:self action:@selector(buttonItemClicked_create:) forControlEvents:UIControlEventTouchUpInside];
|
|
|
+ [self.view addSubview:self.createButton];
|
|
|
+ self.createButton.hidden = YES;
|
|
|
+
|
|
|
self.selecIndex = CSignatureTopBarDefault;
|
|
|
+ [self createGestureRecognizer];
|
|
|
}
|
|
|
|
|
|
- (void)viewWillLayoutSubviews {
|
|
|
[super viewWillLayoutSubviews];
|
|
|
+ self.colorPicker.frame = CGRectMake(0, self.view.frame.size.height/2, self.view.frame.size.width, self.view.frame.size.height/2);
|
|
|
if (@available(iOS 11.0, *)) {
|
|
|
- self.topBar.frame = CGRectMake(0, self.view.safeAreaInsets.top, self.view.frame.size.width, 50);
|
|
|
+ self.colorSelectView.frame = CGRectMake(0, self.view.safeAreaInsets.top, self.view.frame.size.width, 90);
|
|
|
+ self.signatureDrawTextView.frame = CGRectMake(self.view.safeAreaInsets.left, self.view.safeAreaInsets.top + 90, self.view.frame.size.width - self.view.safeAreaInsets.left - self.view.safeAreaInsets.right, self.view.frame.size.height/2);
|
|
|
+ self.signatureDrawImageView.frame = self.signatureDrawTextView.frame;
|
|
|
+ self.createButton.frame = CGRectMake(self.view.frame.size.width - 70 - self.view.safeAreaInsets.right, self.view.frame.size.height - 100 - self.view.safeAreaInsets.bottom, 50, 50);
|
|
|
} else {
|
|
|
- self.topBar.frame = CGRectMake(0, 64, self.view.frame.size.width, 50);
|
|
|
+ self.colorSelectView.frame = CGRectMake(0, 64, self.view.frame.size.width, 90);
|
|
|
+ self.signatureDrawTextView.frame = CGRectMake(0, 190, self.view.frame.size.width, self.view.frame.size.height/2);
|
|
|
+ self.signatureDrawImageView.frame = self.signatureDrawTextView.frame;
|
|
|
+ self.createButton.frame = CGRectMake(self.view.frame.size.width - 70, self.view.frame.size.height - 100, 50, 50);
|
|
|
}
|
|
|
- self.signatureDrawView.frame = CGRectMake(0, 150, self.view.frame.size.width, self.view.frame.size.height/2);
|
|
|
- self.cacelButon.frame = CGRectMake(80, 700, 90, 50);
|
|
|
- self.saveButton.frame = CGRectMake(self.view.frame.size.width - 170, 700, 90, 50);
|
|
|
+
|
|
|
self.textField.frame = CGRectMake((self.view.frame.size.width - 300)/2, 200, 300, 100);
|
|
|
self.bottomBorder.frame = CGRectMake(0, self.textField.frame.size.height - 1, self.textField.frame.size.width, 1.0);
|
|
|
}
|
|
|
|
|
|
-#pragma mark - CSignatureTopBarDelegate
|
|
|
+- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
|
|
|
+ [self.signatureDrawTextView signatureClear];
|
|
|
+}
|
|
|
|
|
|
-- (void)signatureTopBar:(CSignatureTopBar *)signatureTopBar selectIndex:(CSignatureTopBarSelectedIndex)selectIndex {
|
|
|
- switch (selectIndex) {
|
|
|
- case CSignatureTopBarDefault:
|
|
|
- {
|
|
|
- self.colorSelectView.hidden = NO;
|
|
|
- self.signatureDrawView.hidden = NO;
|
|
|
- self.textField.hidden = YES;
|
|
|
- self.selecIndex = CSignatureTopBarDefault;
|
|
|
- }
|
|
|
- break;
|
|
|
- case CSignatureTopBarText:
|
|
|
- {
|
|
|
- self.colorSelectView.hidden = NO;
|
|
|
- self.signatureDrawView.hidden = YES;
|
|
|
- self.textField.hidden = NO;
|
|
|
- self.selecIndex = CSignatureTopBarText;
|
|
|
- }
|
|
|
- break;
|
|
|
- case CSignatureTopBarImage:
|
|
|
- {
|
|
|
- self.colorSelectView.hidden = YES;
|
|
|
- self.signatureDrawView.hidden = NO;
|
|
|
- self.textField.hidden = YES;
|
|
|
- self.selecIndex = CSignatureTopBarImage;
|
|
|
- [self createImageSignature];
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- default:
|
|
|
- break;
|
|
|
+#pragma mark - Private Methods
|
|
|
+
|
|
|
+- (void)createGestureRecognizer {
|
|
|
+ [self.createButton setUserInteractionEnabled:YES];
|
|
|
+
|
|
|
+ UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panaddBookmarkBtn:)];
|
|
|
+ [self.createButton addGestureRecognizer:panRecognizer];
|
|
|
+}
|
|
|
+
|
|
|
+- (void)panaddBookmarkBtn:(UIPanGestureRecognizer *)gestureRecognizer {
|
|
|
+ CGPoint point = [gestureRecognizer translationInView:self.view];
|
|
|
+ CGFloat newX = self.createButton.center.x + point.x;
|
|
|
+ CGFloat newY = self.createButton.center.y + point.y;
|
|
|
+ if (CGRectContainsPoint(self.view.frame, CGPointMake(newX, newY))) {
|
|
|
+ self.createButton.center = CGPointMake(newX, newY);
|
|
|
}
|
|
|
+ [gestureRecognizer setTranslation:CGPointZero inView:self.view];
|
|
|
+}
|
|
|
+
|
|
|
+- (UIImage *)captureScreenshotOfTextField:(UITextField *)textField {
|
|
|
+ textField.tintColor = [UIColor whiteColor];
|
|
|
+ CGRect textRect = [textField textRectForBounds:CGRectInset(textField.bounds, 0, 1)];
|
|
|
+ UIGraphicsBeginImageContextWithOptions(textRect.size, NO, 0.0);
|
|
|
+ [textField drawViewHierarchyInRect:textField.bounds afterScreenUpdates:YES];
|
|
|
+ UIImage *textFieldImage = UIGraphicsGetImageFromCurrentImageContext();
|
|
|
+ UIGraphicsEndImageContext();
|
|
|
+ return textFieldImage;
|
|
|
}
|
|
|
|
|
|
#pragma mark - Action
|
|
|
|
|
|
- (void)buttonItemClicked_Save:(id)sender {
|
|
|
- if ((CSignatureTopBarDefault == self.selecIndex) || (CSignatureTopBarImage == self.selecIndex)) {
|
|
|
- UIImage *image = [self.signatureDrawView signatureImage];
|
|
|
+ if (CSignatureTopBarDefault == self.selecIndex) {
|
|
|
+ UIImage *image = [self.signatureDrawTextView signatureImage];
|
|
|
if (self.delegate && [self.delegate respondsToSelector:@selector(signatureEditViewController:image:)]) {
|
|
|
[self.delegate signatureEditViewController:self image:image];
|
|
|
}
|
|
|
- } else if (CSignatureTopBarText == self.selecIndex) {
|
|
|
+ } else if (CSignatureTopBarImage == self.selecIndex) {
|
|
|
+ UIImage *image = [self.signatureDrawImageView signatureImage];
|
|
|
+ if (self.delegate && [self.delegate respondsToSelector:@selector(signatureEditViewController:image:)]) {
|
|
|
+ [self.delegate signatureEditViewController:self image:image];
|
|
|
+ }
|
|
|
+ }else if (CSignatureTopBarText == self.selecIndex) {
|
|
|
+ UIImage *image = [self captureScreenshotOfTextField:self.textField];
|
|
|
if (self.textField.text) {
|
|
|
- if(self.delegate && [self.delegate respondsToSelector:@selector(signatureEditViewController:text:)]) {
|
|
|
- [self.delegate signatureEditViewController:self text:self.textField.text];
|
|
|
+ if(self.delegate && [self.delegate respondsToSelector:@selector(signatureEditViewController:image:)]) {
|
|
|
+ [self.delegate signatureEditViewController:self image:image];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -162,6 +191,41 @@
|
|
|
[self.navigationController popViewControllerAnimated:YES];
|
|
|
}
|
|
|
|
|
|
+- (void)buttonItemClicked_create:(id)sender {
|
|
|
+ [self createImageSignature];
|
|
|
+}
|
|
|
+
|
|
|
+- (void)segmentedControlValueChanged_singature:(id)sender {
|
|
|
+ if (self.segmentedControl.selectedSegmentIndex == 0) {
|
|
|
+ self.colorSelectView.hidden = NO;
|
|
|
+ self.signatureDrawTextView.hidden = NO;
|
|
|
+ self.signatureDrawImageView.hidden = YES;
|
|
|
+ self.textField.hidden = YES;
|
|
|
+ self.selecIndex = CSignatureTopBarDefault;
|
|
|
+ self.colorSelectView.hidden = NO;
|
|
|
+ self.createButton.hidden = YES;
|
|
|
+ self.signatureDrawTextView.selectIndex = CSignatureDrawText;
|
|
|
+ } else if (self.segmentedControl.selectedSegmentIndex == 1) {
|
|
|
+ self.colorSelectView.hidden = NO;
|
|
|
+ self.signatureDrawTextView.hidden = YES;
|
|
|
+ self.signatureDrawImageView.hidden = YES;
|
|
|
+ self.textField.hidden = NO;
|
|
|
+ self.selecIndex = CSignatureTopBarText;
|
|
|
+ self.colorSelectView.hidden = NO;
|
|
|
+ self.createButton.hidden = YES;
|
|
|
+ } else if (self.segmentedControl.selectedSegmentIndex == 2) {
|
|
|
+ self.colorSelectView.hidden = YES;
|
|
|
+ self.signatureDrawTextView.hidden = YES;
|
|
|
+ self.signatureDrawImageView.hidden = NO;
|
|
|
+ self.textField.hidden = YES;
|
|
|
+ self.selecIndex = CSignatureTopBarImage;
|
|
|
+ self.createButton.hidden = NO;
|
|
|
+ self.colorSelectView.hidden = YES;
|
|
|
+ self.signatureDrawImageView.selectIndex = CSignatureDrawImage;
|
|
|
+ [self.signatureDrawImageView setNeedsDisplay];
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
#pragma mark - Private Methods
|
|
|
|
|
|
- (void)createImageSignature {
|
|
@@ -223,12 +287,34 @@
|
|
|
CGImageRelease(imageRef);
|
|
|
}
|
|
|
|
|
|
- self.signatureDrawView.image = image;
|
|
|
- [self.signatureDrawView setNeedsDisplay];
|
|
|
+ self.signatureDrawImageView.image = image;
|
|
|
+ [self.signatureDrawImageView setNeedsDisplay];
|
|
|
}
|
|
|
|
|
|
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
|
|
|
[picker dismissViewControllerAnimated:YES completion:nil];
|
|
|
}
|
|
|
|
|
|
+#pragma mark - CPDFColorSelectViewDelegate
|
|
|
+
|
|
|
+- (void)selectColorView:(CPDFColorSelectView *)select color:(UIColor *)color {
|
|
|
+ self.textField.textColor = color;
|
|
|
+ self.signatureDrawTextView.color = color;
|
|
|
+}
|
|
|
+
|
|
|
+- (void)selectColorView:(CPDFColorSelectView *)select {
|
|
|
+ _colorPicker = [[CPDFColorPickerView alloc] initWithFrame:self.view.frame];
|
|
|
+ _colorPicker.delegate = self;
|
|
|
+ _colorPicker.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
|
|
+ _colorPicker.backgroundColor = [UIColor whiteColor];
|
|
|
+ [self.view addSubview:self.colorPicker];
|
|
|
+}
|
|
|
+
|
|
|
+#pragma mark - CPDFColorPickerViewDelegate
|
|
|
+
|
|
|
+- (void)pickerView:(CPDFColorPickerView *)colorPickerView color:(UIColor *)color {
|
|
|
+ self.signatureDrawTextView.color = color;
|
|
|
+ self.textField.textColor = color;
|
|
|
+}
|
|
|
+
|
|
|
@end
|