// // CPDFAddViewController.m // PDFViewer // // Created by kdanmobile_2 on 2022/12/15. // #import "PDFAddWaterMarkViewController.h" #import #import #import "PDFViewController.h" #import "PDFWatermarkTextView.h" #import "PDFWatermarkTextPreview.h" #import "PDFWatermarkImageView.h" #import "PDFWatermarkImagePreview.h" #import "PDFDataModel.h" #import "PDFWatermarkEditView.h" #import "Masonry.h" @interface PDFAddWaterMarkViewController () @property (nonatomic,assign) CGSize imageSize; @property (nonatomic,strong) UIImage *image; @property (nonatomic,strong) PDFDataModel *dataModel; @property (nonatomic,strong) PDFWatermarkEditView *editView; @property (nonatomic,strong) NSMutableArray *dataArray; @property (nonatomic,strong) CPDFDocument *document; @property (nonatomic,strong) UISegmentedControl *segmentedControl; @end @implementation PDFAddWaterMarkViewController #pragma mark - UIViewController Methods - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStylePlain target:self action:@selector(onClickedDoneBtn)]; UIBarButtonItem *editBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(editClick)]; UIBarButtonItem *cancelBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelClick)]; self.navigationItem.rightBarButtonItems = @[doneBtn,editBtn,cancelBtn]; [self createView]; [self addConstraint]; } #pragma mark - Initializers - (instancetype)initWithDocument:(CPDFDocument *)document { self = [super init]; if (self) { _document = document; CPDFPage *pdfPage = [document pageAtIndex:0]; CGSize imageSize = [document pageSizeAtIndex:0]; _image = [pdfPage thumbnailOfSize:imageSize]; _imageSize = _image.size; } return self; } - (void)createView { NSArray *segmentArray = @[@"Text",@"Image"]; _segmentedControl = [[UISegmentedControl alloc] initWithItems:segmentArray]; [_segmentedControl addTarget:self action:@selector(segmentedAction:) forControlEvents:UIControlEventValueChanged]; _segmentedControl.selectedSegmentIndex = 0; [_segmentedControl setBackgroundColor:[UIColor whiteColor]]; _textViewController = [[PDFTextWatermarkController alloc] init]; _imageViewController = [[PDFImageWatermarkController alloc] init]; [self addChildViewController:_textViewController]; [self addChildViewController:_imageViewController]; [self.view addSubview:self.segmentedControl]; [self.view addSubview:_textViewController.view]; [self.view addSubview:_imageViewController.view]; _editView = [[PDFWatermarkEditView alloc] init]; _editView.editTableView.dataSource = self; _editView.editTableView.delegate = self; [self.view addSubview:_editView]; _textViewController.textPreview.documentImageView.image = self.image; _imageViewController.imagePreview.documentImageView.image = self.image; _imageViewController.view.hidden = YES; } - (void)addConstraint { if ([UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeRight || [UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeLeft || [UIDevice currentDevice].orientation == UIDeviceOrientationPortraitUpsideDown || (self.view.frame.size.width > self.view.frame.size.height)) { [self addSideConstraint]; } else { [self addNormalConstraint]; } } #pragma mark - Accessors - (NSArray *)dataArray { if (!_dataArray) { _dataArray = [NSMutableArray array]; NSArray *waterArray = [_document watermarks]; for (NSInteger i = 0; i < waterArray.count; i++) { CPDFWatermark *dataWater = [[CPDFWatermark alloc] init]; dataWater = waterArray[i]; [_dataArray addObject:dataWater]; } } return _dataArray; } #pragma mark - UITableViewDataSource - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.dataArray.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *path = @"AddWater"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:path]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:path]; } if ([self.dataArray[indexPath.row] text]) { cell.textLabel.text = [self.dataArray[indexPath.row] text]; } else { cell.imageView.image = [self.dataArray[indexPath.row] image]; } return cell; } #pragma mark - UITableViewDelegate - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { return UITableViewCellEditingStyleDelete; } - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { [self.delegate PDFViewPerformDeleteWatermark:self.dataArray[indexPath.row]]; [self.dataArray removeObjectAtIndex:indexPath.row]; [tableView beginUpdates]; [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; [tableView endUpdates]; } } - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath { CPDFWatermark *dataWater = _dataArray[sourceIndexPath.row]; [_dataArray removeObject:dataWater]; [_dataArray insertObject:dataWater atIndex:destinationIndexPath.row]; } #pragma mark - Actions - (void)onClickedDoneBtn { self.navigationItem.rightBarButtonItem = nil; if (_segmentedControl.selectedSegmentIndex == 0) { _dataModel = self.textViewController.dataModel; [self.delegate PDFViewPerformChangeTextWatermark:self.dataModel]; } else { _dataModel = self.imageViewController.dataModel; [self.delegate PDFViewPerformChangeImageWatermark:self.dataModel]; } [self.navigationController popViewControllerAnimated:YES]; } - (void)segmentedAction:(UISegmentedControl *)sender { switch(sender.selectedSegmentIndex) { case 0: _textViewController.view.hidden = NO; _imageViewController.view.hidden = YES; break; case 1: _textViewController.view.hidden = YES; _imageViewController.view.hidden = NO; break; default: break; } } - (void)editClick { if (self.editView.center.x < 50) { [_editView mas_remakeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.view.mas_left); make.top.equalTo(self.textViewController.textPreview.mas_top); make.bottom.equalTo(self.textViewController.textPreview.mas_bottom); make.width.mas_equalTo(200); }]; [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{ self.editView.center = CGPointMake(self.editView.center.x + 200, self.editView.center.y); } completion:nil]; } } - (void)cancelClick { if (self.editView.center.x > 0) { [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{ self.editView.center = CGPointMake(self.editView.center.x - 200, self.editView.center.y); } completion:nil]; } } #pragma mark - Orientation - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator { [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; if ([UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeRight || [UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeLeft) { [self addSideConstraint]; } else if ([UIDevice currentDevice].orientation == UIDeviceOrientationPortrait) { [self addNormalConstraint]; } } - (void)addSideConstraint { [_segmentedControl mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.view.mas_top).offset(43.6); make.width.equalTo(self.view.mas_width); make.height.mas_equalTo(35); }]; [_textViewController.view mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(_segmentedControl.mas_bottom).offset(0); make.width.equalTo(_segmentedControl.mas_width); make.bottom.equalTo(self.view).offset(-34); }]; [_imageViewController.view mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(_segmentedControl.mas_bottom).offset(0); make.width.equalTo(_segmentedControl.mas_width); make.bottom.equalTo(self.view).offset(-34); }]; [_textViewController.textView mas_remakeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(self.view.mas_right).offset(-38); make.height.equalTo(@205); make.width.equalTo(@393); make.bottom.equalTo(self.view.mas_bottom).offset(-74); }]; [_textViewController.textPreview mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.segmentedControl.mas_bottom).offset(0); make.right.equalTo(_textViewController.textView.mas_left).offset(-5); make.left.equalTo(self.view.mas_left).offset(0); make.bottom.equalTo(self.view.mas_bottom).offset(-34); }]; [_imageViewController.imageView mas_remakeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(self.view.mas_right).offset(-38); make.height.equalTo(@205); make.width.equalTo(@393); make.bottom.equalTo(self.view.mas_bottom).offset(-74); }]; [_imageViewController.imagePreview mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.segmentedControl.mas_bottom).offset(0); make.right.equalTo(_imageViewController.imageView.mas_left).offset(-5); make.left.equalTo(self.view.mas_left).offset(0); make.bottom.equalTo(self.view.mas_bottom).offset(-34); }]; [_textViewController.textPreview.documentImageView mas_remakeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(_textViewController.textPreview.mas_centerX); make.centerY.equalTo(_textViewController.textPreview.mas_centerY); make.width.equalTo(@(_imageSize.width / 10)); make.height.equalTo(@(_imageSize.height / 10)); }]; [_imageViewController.imagePreview.documentImageView mas_remakeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(_imageViewController.imagePreview.mas_centerX); make.centerY.equalTo(_imageViewController.imagePreview.mas_centerY); make.width.equalTo(@(_imageSize.width / 10)); make.height.equalTo(@(_imageSize.height / 10)); }]; } - (void)addNormalConstraint { [_segmentedControl mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.view.mas_top).offset(83.6); make.width.equalTo(self.view.mas_width); make.height.mas_equalTo(40); }]; [_textViewController.view mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(_segmentedControl.mas_bottom).offset(0); make.width.equalTo(_segmentedControl.mas_width); make.bottom.equalTo(self.view).offset(-34); }]; [_imageViewController.view mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(_segmentedControl.mas_bottom).offset(0); make.width.equalTo(_segmentedControl.mas_width); make.bottom.equalTo(self.view).offset(-34); }]; [_textViewController.textPreview.documentImageView mas_remakeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(_textViewController.textPreview.mas_centerX); make.centerY.equalTo(_textViewController.textPreview.mas_centerY); make.width.equalTo(@(_imageSize.width / 8)); make.height.equalTo(@(_imageSize.height / 8)); }]; [_imageViewController.imagePreview.documentImageView mas_remakeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(_imageViewController.imagePreview.mas_centerX); make.centerY.equalTo(_imageViewController.imagePreview.mas_centerY); make.width.equalTo(@(_imageSize.width / 8)); make.height.equalTo(@(_imageSize.height / 8)); }]; } @end