CPDFHeaderFooterAddController.m 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  1. //
  2. // HeaderFooterAlertViewController.m
  3. // PDFViewer
  4. //
  5. // Created by kdanmobile_2 on 2022/11/16.
  6. //
  7. #import "CPDFHeaderFooterAddController.h"
  8. @interface CPDFHeaderFooterAddController ()
  9. @property (nonatomic,strong) CPDFHeaderFooterAddView *headerFooterview;
  10. @property (nonatomic,strong) CPDFHeaderFooterTextTableView *pageFormat;
  11. @property (nonatomic,strong) NSMutableArray *dataArray;
  12. @end
  13. @implementation CPDFHeaderFooterAddController
  14. - (void)viewDidLoad {
  15. [super viewDidLoad];
  16. // Do any additional setup after loading the view.
  17. // Setting navigation
  18. [self initNavigation];
  19. // Initialize show label
  20. [self initShowLabel];
  21. // Initialize model
  22. [self initModel];
  23. // Add page image
  24. [self initIamge];
  25. // Add view
  26. [self initBttonmView];
  27. // UI event
  28. [self initBasicEvent];
  29. [self initExtendEvent];
  30. }
  31. #pragma mark - Initializers
  32. - (void)initNavigation {
  33. self.navigationItem.title = @"Add Page NUmber";
  34. self.navigationController.toolbarHidden = YES;
  35. self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneClick:)];
  36. self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelClick:)];
  37. }
  38. - (id)initWithIamge:(UIImage *)image WithSize:(CGSize)size {
  39. self = [super init];
  40. if (self) {
  41. _image = image;
  42. _size = size;
  43. }
  44. return self;
  45. }
  46. - (void)initModel {
  47. _modelData = [[CPDFHeaderFooterModel alloc] init];
  48. _modelData.fontSize = 18.0;
  49. _modelData.fontSelcet = 0;
  50. _modelData.fontPosition = 1;
  51. _modelData.pageStart = @"1";
  52. }
  53. - (void)initShowLabel {
  54. _showLabel = [[UILabel alloc] init];
  55. [_showLabel setText:@"1"];
  56. _showLabel.font = [UIFont systemFontOfSize:6];
  57. }
  58. - (void)initIamge {
  59. _imageView = [[UIImageView alloc] init];
  60. _imageView.image = self.image;
  61. CALayer *layer = [_imageView layer];
  62. layer.borderColor = [[UIColor blackColor] CGColor];
  63. layer.borderWidth = 1.0f;
  64. [self.view addSubview:_imageView];
  65. [_imageView mas_makeConstraints:^(MASConstraintMaker *make) {
  66. make.top.equalTo(self.view.mas_top).offset(125);
  67. make.left.equalTo(self.view.mas_left).offset((393 / 2) - (self.size.width / 6));
  68. make.width.mas_equalTo(self.size.width / 3);
  69. make.height.mas_equalTo(self.size.height / 3);
  70. }];
  71. }
  72. - (void)initBttonmView {
  73. _headerFooterview = [[CPDFHeaderFooterAddView alloc] init];
  74. [_headerFooterview setText];
  75. [self.view addSubview:_headerFooterview];
  76. [self.headerFooterview mas_makeConstraints:^(MASConstraintMaker *make) {
  77. make.top.equalTo(self.imageView.mas_bottom).offset(60);
  78. make.left.equalTo(self.view.mas_left);
  79. make.width.mas_equalTo(self.view.frame.size.width);
  80. make.height.mas_equalTo(self.view.frame.size.height);
  81. }];
  82. }
  83. - (void)initBasicEvent {
  84. [_headerFooterview.localSegment addTarget:self action:@selector(changeLocation:) forControlEvents:UIControlEventValueChanged];
  85. [_headerFooterview.aligbmentSegment addTarget:self action:@selector(changeAligbment:) forControlEvents:UIControlEventValueChanged];
  86. [_headerFooterview.colorSlider addTarget:self action:@selector(sliderChange:) forControlEvents:UIControlEventValueChanged];
  87. }
  88. - (void)initExtendEvent {
  89. [_headerFooterview.fontSizeText addTarget:self action:@selector(changeFontSize:) forControlEvents:UIControlEventEditingChanged];
  90. [_headerFooterview.pageIndexNumberText addTarget:self action:@selector(changePageStart:) forControlEvents:UIControlEventEditingChanged];
  91. _headerFooterview.pageNumberText.delegate = self;
  92. }
  93. #pragma mark - Accessors
  94. - (NSArray *)dataArray {
  95. if (!_dataArray) {
  96. _dataArray = [NSMutableArray array];
  97. NSArray *pageFormatArray = [[NSArray alloc] initWithObjects:@"1",@"page 1",@"1/n",@"1 of n",@"page 1 of n",nil];
  98. for (int i = 0; i < pageFormatArray.count; i++) {
  99. [_dataArray addObject:pageFormatArray[i]];
  100. }
  101. }
  102. return _dataArray;
  103. }
  104. #pragma mark - UITextFieldDelegate
  105. // TableView initialize
  106. - (void)textFieldDidBeginEditing:(UITextField *)textField {
  107. _pageFormat = [[CPDFHeaderFooterTextTableView alloc] initWithTitleName:@"Format Selection"];
  108. _pageFormat.tableView.delegate = self;
  109. _pageFormat.tableView.dataSource = self;
  110. [self.headerFooterview addSubview:self.pageFormat];
  111. [self.view bringSubviewToFront:self.pageFormat];
  112. [_pageFormat mas_makeConstraints:^(MASConstraintMaker *make) {
  113. make.top.equalTo(self.headerFooterview.mas_top).offset(50);
  114. make.left.equalTo(self.headerFooterview.mas_left).offset(50);
  115. make.width.mas_equalTo(293);
  116. make.height.mas_equalTo(300);
  117. }];
  118. // Tablevire animation
  119. [UIView animateWithDuration:2 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^ {
  120. NSLog(@"animations");
  121. self.pageFormat.center = CGPointMake(self.pageFormat.center.x + 150 + [UIScreen mainScreen].bounds.size.width / 2, self.pageFormat.center.y);
  122. } completion:^(BOOL finished) {
  123. NSLog(@"completion");
  124. }];
  125. [self.pageFormat.okBtn addTarget:self action:@selector(pageFormatOk:) forControlEvents:UIControlEventTouchUpInside];
  126. }
  127. - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
  128. return NO;
  129. }
  130. #pragma mark - UITableViewDataSource
  131. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  132. return self.dataArray.count;
  133. }
  134. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  135. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"pageFormat"];
  136. if (cell == nil) {
  137. cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"pageFormat"];
  138. }
  139. cell.textLabel.text = self.dataArray[indexPath.row];
  140. return cell;
  141. }
  142. #pragma mark - UITableViewDelegate
  143. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  144. self.headerFooterview.pageNumberText.text = self.dataArray[indexPath.row];
  145. self.modelData.fontSelcet = indexPath.row;
  146. self.showLabel.text = self.dataArray[indexPath.row];
  147. }
  148. #pragma mark - Actions
  149. // Candel button enable
  150. - (void)cancelClick:(UIBarButtonItem *)btn {
  151. [self.navigationController popViewControllerAnimated:YES];
  152. }
  153. // Done button enable
  154. - (void)doneClick:(UIBarButtonItem *)btn {
  155. if ([self.delegate respondsToSelector:@selector(changeHeaderFooterModelData:)]) {
  156. [self.delegate changeHeaderFooterModelData:self.modelData];
  157. }
  158. [self.navigationController popViewControllerAnimated:YES];
  159. }
  160. - (void)pageFormatOk:(UIButton *)okBtn {
  161. [self.pageFormat removeFromSuperview];
  162. }
  163. #pragma mark - UI Functions
  164. // Get page start for headerfooter's Model
  165. - (void)changePageStart:(UITextField *)text {
  166. int start = [text.text intValue];
  167. self.modelData.pageStart = [NSString stringWithFormat:@"%d",start];
  168. }
  169. // Get headerfoote's font size for headerfooter's Model
  170. - (void)changeFontSize:(UITextField *)text {
  171. float size = [text.text floatValue];
  172. _showLabel.font = [UIFont systemFontOfSize:size / 3];
  173. _modelData.fontSize = size;
  174. }
  175. // Slider select color
  176. - (void)sliderChange:(UISlider *)slider {
  177. switch ((int)slider.value / 10) {
  178. case 0:
  179. self.showLabel.textColor = [UIColor redColor];
  180. self.modelData.fontColor = [UIColor redColor];
  181. break;
  182. case 1:
  183. self.showLabel.textColor = [UIColor orangeColor];
  184. self.modelData.fontColor = [UIColor orangeColor];
  185. break;
  186. case 2:
  187. self.showLabel.textColor = [UIColor colorWithRed:239.0 / 255 green:140.0 / 255 blue:133.0 / 255 alpha:1];
  188. self.modelData.fontColor = [UIColor colorWithRed:239.0 / 255 green:140.0 / 255 blue:133.0 / 255 alpha:1];
  189. break;
  190. case 3:
  191. self.showLabel.textColor = [UIColor yellowColor];
  192. self.modelData.fontColor = [UIColor yellowColor];;
  193. break;
  194. case 4:
  195. self.showLabel.textColor = [UIColor greenColor];
  196. self.modelData.fontColor = [UIColor greenColor];
  197. break;
  198. case 5:
  199. self.showLabel.textColor = [UIColor blueColor];
  200. self.modelData.fontColor = [UIColor blueColor];
  201. break;
  202. case 6:
  203. self.showLabel.textColor = [UIColor purpleColor];
  204. self.modelData.fontColor = [UIColor purpleColor];
  205. break;
  206. case 7:
  207. self.showLabel.textColor = [UIColor colorWithRed:235.0 / 255 green:61.0 / 255 blue:133.0 / 255 alpha:1];
  208. self.modelData.fontColor = [UIColor colorWithRed:235.0 / 255 green:61.0 / 255 blue:133.0 / 255 alpha:1];
  209. break;
  210. case 8:
  211. self.showLabel.textColor = [UIColor blackColor];
  212. self.modelData.fontColor = [UIColor blackColor];
  213. break;
  214. case 9:
  215. self.showLabel.textColor = [UIColor whiteColor];
  216. self.modelData.fontColor = [UIColor whiteColor];
  217. break;
  218. default:
  219. break;
  220. }
  221. }
  222. // Select headerfooter
  223. - (void)changeLocation:(UISegmentedControl *)sender {
  224. if (sender.selectedSegmentIndex == 0) {
  225. _position.location = kHeader;
  226. } else {
  227. _position.location = kFooter;
  228. }
  229. [self showPages];
  230. }
  231. // Select aligment
  232. - (void)changeAligbment:(UISegmentedControl *)sender {
  233. if (sender.selectedSegmentIndex == 0) {
  234. _position.aligment = kLeft;
  235. } else if (sender.selectedSegmentIndex == 1) {
  236. _position.aligment = kCenter;
  237. } else {
  238. _position.aligment = kRinght;
  239. }
  240. [self showPages];
  241. }
  242. // Show headerfooter and aligment
  243. - (void)showPages {
  244. if (_showLabel == nil) {
  245. _showLabel = [[UILabel alloc] init];
  246. }
  247. [self.imageView addSubview:self.showLabel];
  248. switch (self.position.location) {
  249. case kHeader:
  250. if (self.position.aligment == kLeft) {
  251. [_showLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  252. make.top.equalTo(_imageView.mas_top).offset(0.5);
  253. make.left.equalTo(self.imageView.mas_left).offset(0.5);
  254. make.height.mas_equalTo(10);
  255. make.width.mas_equalTo(20);
  256. }];
  257. self.modelData.fontPosition = 0;
  258. } else if (self.position.aligment == kCenter) {
  259. [_showLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  260. make.top.equalTo(_imageView.mas_top).offset(0.5);
  261. make.left.equalTo(self.imageView.mas_left).offset(self.size.width / 6);
  262. make.height.mas_equalTo(10);
  263. make.width.mas_equalTo(20);
  264. }];
  265. self.modelData.fontPosition = 1;
  266. } else {
  267. [_showLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  268. make.top.equalTo(self.imageView.mas_top).offset(0.5);
  269. make.left.equalTo(self.imageView.mas_left).offset(self.size.width / 3 - 12);
  270. make.height.mas_equalTo(10);
  271. make.width.mas_equalTo(20);
  272. }];
  273. self.modelData.fontPosition = 2;
  274. }
  275. break;
  276. case kFooter:
  277. if (self.position.aligment == kLeft) {
  278. [_showLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  279. make.top.equalTo(self.imageView.mas_top).offset(self.size.height / 3 - 12);
  280. make.left.equalTo(self.imageView.mas_left).offset(0.5);
  281. make.height.mas_equalTo(10);
  282. make.width.mas_equalTo(20);
  283. }];
  284. self.modelData.fontPosition = 3;
  285. } else if (self.position.aligment == kCenter) {
  286. [_showLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  287. make.top.equalTo(self.imageView.mas_top).offset(self.size.height / 3 - 12);
  288. make.left.equalTo(self.imageView.mas_left).offset(self.size.width/6);
  289. make.height.mas_equalTo(10);
  290. make.width.mas_equalTo(20);
  291. }];
  292. self.modelData.fontPosition = 4;
  293. } else {
  294. [_showLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  295. make.top.equalTo(self.imageView.mas_top).offset(self.size.height / 3 - 12);
  296. make.left.equalTo(self.imageView.mas_left).offset(self.size.width / 3 - 12);
  297. make.height.mas_equalTo(10);
  298. make.width.mas_equalTo(20);
  299. }];
  300. self.modelData.fontPosition = 5;
  301. }
  302. break;
  303. default:
  304. break;
  305. }
  306. }
  307. #pragma mark - Orientation
  308. // When orientation
  309. - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
  310. if ([UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeRight) {
  311. [_imageView mas_remakeConstraints:^(MASConstraintMaker *make) {
  312. make.top.equalTo(self.view.mas_top).offset((393 / 2) - (self.size.height / 6));
  313. make.left.equalTo(self.view.mas_left).offset((393 / 2) - (self.size.width/6));
  314. make.width.mas_equalTo(self.size.width / 3);
  315. make.height.mas_equalTo(self.size.height / 3);
  316. }];
  317. [self.headerFooterview mas_remakeConstraints:^(MASConstraintMaker *make) {
  318. make.top.equalTo(self.view.mas_top).offset(15);
  319. make.left.equalTo(self.view.mas_left).offset(self.view.frame.size.width / 2 + 200);
  320. make.width.mas_equalTo(393);
  321. make.height.mas_equalTo(self.view.frame.size.height - 20);
  322. }];
  323. } else if ([UIDevice currentDevice].orientation == UIDeviceOrientationPortrait) {
  324. [_imageView mas_remakeConstraints:^(MASConstraintMaker *make) {
  325. make.top.equalTo(self.view.mas_top).offset(125);
  326. make.left.equalTo(self.view.mas_left).offset((393 / 2) - (self.size.width / 6));
  327. make.width.mas_equalTo(self.size.width / 3);
  328. make.height.mas_equalTo(self.size.height / 3);
  329. }];
  330. [self.headerFooterview mas_remakeConstraints:^(MASConstraintMaker *make) {
  331. make.top.equalTo(self.imageView.mas_bottom).offset(60);
  332. make.left.equalTo(self.view.mas_left);
  333. make.width.mas_equalTo(self.view.frame.size.width);
  334. make.height.mas_equalTo(self.view.frame.size.height);
  335. }];
  336. }
  337. }
  338. @end