// // HeaderFooterAlertViewController.m // PDFViewer // // Created by kdanmobile_2 on 2022/11/16. // #import "CPDFHeaderFooterAddController.h" @interface CPDFHeaderFooterAddController () @property (nonatomic,strong) CPDFHeaderFooterAddView *headerFooterview; @property (nonatomic,strong) CPDFHeaderFooterTextTableView *pageFormat; @property (nonatomic,strong) NSMutableArray *dataArray; @end @implementation CPDFHeaderFooterAddController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. // Setting navigation [self initNavigation]; // Initialize show label [self initShowLabel]; // Initialize model [self initModel]; // Add page image [self initIamge]; // Add view [self initBttonmView]; // UI event [self initBasicEvent]; [self initExtendEvent]; } #pragma mark - Initializers - (void)initNavigation { self.navigationItem.title = @"Add Page NUmber"; self.navigationController.toolbarHidden = YES; self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneClick:)]; self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelClick:)]; } - (id)initWithIamge:(UIImage *)image WithSize:(CGSize)size { self = [super init]; if (self) { _image = image; _size = size; } return self; } - (void)initModel { _modelData = [[CPDFHeaderFooterModel alloc] init]; _modelData.fontSize = 18.0; _modelData.fontSelcet = 0; _modelData.fontPosition = 1; _modelData.pageStart = @"1"; } - (void)initShowLabel { _showLabel = [[UILabel alloc] init]; [_showLabel setText:@"1"]; _showLabel.font = [UIFont systemFontOfSize:6]; } - (void)initIamge { _imageView = [[UIImageView alloc] init]; _imageView.image = self.image; CALayer *layer = [_imageView layer]; layer.borderColor = [[UIColor blackColor] CGColor]; layer.borderWidth = 1.0f; [self.view addSubview:_imageView]; [_imageView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.view.mas_top).offset(125); make.left.equalTo(self.view.mas_left).offset((393 / 2) - (self.size.width / 6)); make.width.mas_equalTo(self.size.width / 3); make.height.mas_equalTo(self.size.height / 3); }]; } - (void)initBttonmView { _headerFooterview = [[CPDFHeaderFooterAddView alloc] init]; [_headerFooterview setText]; [self.view addSubview:_headerFooterview]; [self.headerFooterview mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.imageView.mas_bottom).offset(60); make.left.equalTo(self.view.mas_left); make.width.mas_equalTo(self.view.frame.size.width); make.height.mas_equalTo(self.view.frame.size.height); }]; } - (void)initBasicEvent { [_headerFooterview.localSegment addTarget:self action:@selector(changeLocation:) forControlEvents:UIControlEventValueChanged]; [_headerFooterview.aligbmentSegment addTarget:self action:@selector(changeAligbment:) forControlEvents:UIControlEventValueChanged]; [_headerFooterview.colorSlider addTarget:self action:@selector(sliderChange:) forControlEvents:UIControlEventValueChanged]; } - (void)initExtendEvent { [_headerFooterview.fontSizeText addTarget:self action:@selector(changeFontSize:) forControlEvents:UIControlEventEditingChanged]; [_headerFooterview.pageIndexNumberText addTarget:self action:@selector(changePageStart:) forControlEvents:UIControlEventEditingChanged]; _headerFooterview.pageNumberText.delegate = self; } #pragma mark - Accessors - (NSArray *)dataArray { if (!_dataArray) { _dataArray = [NSMutableArray array]; NSArray *pageFormatArray = [[NSArray alloc] initWithObjects:@"1",@"page 1",@"1/n",@"1 of n",@"page 1 of n",nil]; for (int i = 0; i < pageFormatArray.count; i++) { [_dataArray addObject:pageFormatArray[i]]; } } return _dataArray; } #pragma mark - UITextFieldDelegate // TableView initialize - (void)textFieldDidBeginEditing:(UITextField *)textField { _pageFormat = [[CPDFHeaderFooterTextTableView alloc] initWithTitleName:@"Format Selection"]; _pageFormat.tableView.delegate = self; _pageFormat.tableView.dataSource = self; [self.headerFooterview addSubview:self.pageFormat]; [self.view bringSubviewToFront:self.pageFormat]; [_pageFormat mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.headerFooterview.mas_top).offset(50); make.left.equalTo(self.headerFooterview.mas_left).offset(50); make.width.mas_equalTo(293); make.height.mas_equalTo(300); }]; // Tablevire animation [UIView animateWithDuration:2 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^ { NSLog(@"animations"); self.pageFormat.center = CGPointMake(self.pageFormat.center.x + 150 + [UIScreen mainScreen].bounds.size.width / 2, self.pageFormat.center.y); } completion:^(BOOL finished) { NSLog(@"completion"); }]; [self.pageFormat.okBtn addTarget:self action:@selector(pageFormatOk:) forControlEvents:UIControlEventTouchUpInside]; } - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { return NO; } #pragma mark - UITableViewDataSource - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.dataArray.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"pageFormat"]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"pageFormat"]; } cell.textLabel.text = self.dataArray[indexPath.row]; return cell; } #pragma mark - UITableViewDelegate - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { self.headerFooterview.pageNumberText.text = self.dataArray[indexPath.row]; self.modelData.fontSelcet = indexPath.row; self.showLabel.text = self.dataArray[indexPath.row]; } #pragma mark - Actions // Candel button enable - (void)cancelClick:(UIBarButtonItem *)btn { [self.navigationController popViewControllerAnimated:YES]; } // Done button enable - (void)doneClick:(UIBarButtonItem *)btn { if ([self.delegate respondsToSelector:@selector(changeHeaderFooterModelData:)]) { [self.delegate changeHeaderFooterModelData:self.modelData]; } [self.navigationController popViewControllerAnimated:YES]; } - (void)pageFormatOk:(UIButton *)okBtn { [self.pageFormat removeFromSuperview]; } #pragma mark - UI Functions // Get page start for headerfooter's Model - (void)changePageStart:(UITextField *)text { int start = [text.text intValue]; self.modelData.pageStart = [NSString stringWithFormat:@"%d",start]; } // Get headerfoote's font size for headerfooter's Model - (void)changeFontSize:(UITextField *)text { float size = [text.text floatValue]; _showLabel.font = [UIFont systemFontOfSize:size / 3]; _modelData.fontSize = size; } // Slider select color - (void)sliderChange:(UISlider *)slider { switch ((int)slider.value / 10) { case 0: self.showLabel.textColor = [UIColor redColor]; self.modelData.fontColor = [UIColor redColor]; break; case 1: self.showLabel.textColor = [UIColor orangeColor]; self.modelData.fontColor = [UIColor orangeColor]; break; case 2: self.showLabel.textColor = [UIColor colorWithRed:239.0 / 255 green:140.0 / 255 blue:133.0 / 255 alpha:1]; self.modelData.fontColor = [UIColor colorWithRed:239.0 / 255 green:140.0 / 255 blue:133.0 / 255 alpha:1]; break; case 3: self.showLabel.textColor = [UIColor yellowColor]; self.modelData.fontColor = [UIColor yellowColor];; break; case 4: self.showLabel.textColor = [UIColor greenColor]; self.modelData.fontColor = [UIColor greenColor]; break; case 5: self.showLabel.textColor = [UIColor blueColor]; self.modelData.fontColor = [UIColor blueColor]; break; case 6: self.showLabel.textColor = [UIColor purpleColor]; self.modelData.fontColor = [UIColor purpleColor]; break; case 7: self.showLabel.textColor = [UIColor colorWithRed:235.0 / 255 green:61.0 / 255 blue:133.0 / 255 alpha:1]; self.modelData.fontColor = [UIColor colorWithRed:235.0 / 255 green:61.0 / 255 blue:133.0 / 255 alpha:1]; break; case 8: self.showLabel.textColor = [UIColor blackColor]; self.modelData.fontColor = [UIColor blackColor]; break; case 9: self.showLabel.textColor = [UIColor whiteColor]; self.modelData.fontColor = [UIColor whiteColor]; break; default: break; } } // Select headerfooter - (void)changeLocation:(UISegmentedControl *)sender { if (sender.selectedSegmentIndex == 0) { _position.location = kHeader; } else { _position.location = kFooter; } [self showPages]; } // Select aligment - (void)changeAligbment:(UISegmentedControl *)sender { if (sender.selectedSegmentIndex == 0) { _position.aligment = kLeft; } else if (sender.selectedSegmentIndex == 1) { _position.aligment = kCenter; } else { _position.aligment = kRinght; } [self showPages]; } // Show headerfooter and aligment - (void)showPages { if (_showLabel == nil) { _showLabel = [[UILabel alloc] init]; } [self.imageView addSubview:self.showLabel]; switch (self.position.location) { case kHeader: if (self.position.aligment == kLeft) { [_showLabel mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(_imageView.mas_top).offset(0.5); make.left.equalTo(self.imageView.mas_left).offset(0.5); make.height.mas_equalTo(10); make.width.mas_equalTo(20); }]; self.modelData.fontPosition = 0; } else if (self.position.aligment == kCenter) { [_showLabel mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(_imageView.mas_top).offset(0.5); make.left.equalTo(self.imageView.mas_left).offset(self.size.width / 6); make.height.mas_equalTo(10); make.width.mas_equalTo(20); }]; self.modelData.fontPosition = 1; } else { [_showLabel mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.imageView.mas_top).offset(0.5); make.left.equalTo(self.imageView.mas_left).offset(self.size.width / 3 - 12); make.height.mas_equalTo(10); make.width.mas_equalTo(20); }]; self.modelData.fontPosition = 2; } break; case kFooter: if (self.position.aligment == kLeft) { [_showLabel mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.imageView.mas_top).offset(self.size.height / 3 - 12); make.left.equalTo(self.imageView.mas_left).offset(0.5); make.height.mas_equalTo(10); make.width.mas_equalTo(20); }]; self.modelData.fontPosition = 3; } else if (self.position.aligment == kCenter) { [_showLabel mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.imageView.mas_top).offset(self.size.height / 3 - 12); make.left.equalTo(self.imageView.mas_left).offset(self.size.width/6); make.height.mas_equalTo(10); make.width.mas_equalTo(20); }]; self.modelData.fontPosition = 4; } else { [_showLabel mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.imageView.mas_top).offset(self.size.height / 3 - 12); make.left.equalTo(self.imageView.mas_left).offset(self.size.width / 3 - 12); make.height.mas_equalTo(10); make.width.mas_equalTo(20); }]; self.modelData.fontPosition = 5; } break; default: break; } } #pragma mark - Orientation // When orientation - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator { if ([UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeRight) { [_imageView mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.view.mas_top).offset((393 / 2) - (self.size.height / 6)); make.left.equalTo(self.view.mas_left).offset((393 / 2) - (self.size.width/6)); make.width.mas_equalTo(self.size.width / 3); make.height.mas_equalTo(self.size.height / 3); }]; [self.headerFooterview mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.view.mas_top).offset(15); make.left.equalTo(self.view.mas_left).offset(self.view.frame.size.width / 2 + 200); make.width.mas_equalTo(393); make.height.mas_equalTo(self.view.frame.size.height - 20); }]; } else if ([UIDevice currentDevice].orientation == UIDeviceOrientationPortrait) { [_imageView mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.view.mas_top).offset(125); make.left.equalTo(self.view.mas_left).offset((393 / 2) - (self.size.width / 6)); make.width.mas_equalTo(self.size.width / 3); make.height.mas_equalTo(self.size.height / 3); }]; [self.headerFooterview mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.imageView.mas_bottom).offset(60); make.left.equalTo(self.view.mas_left); make.width.mas_equalTo(self.view.frame.size.width); make.height.mas_equalTo(self.view.frame.size.height); }]; } } @end