CPDFHeaderFooterAddController.m 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  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. @end
  10. @implementation CPDFHeaderFooterAddController
  11. - (id)initWithIamge:(UIImage *)image WithSize:(CGSize)size WithDocument:(CPDFDocument *)docment WithView:(CPDFView *)pdfView {
  12. self = [super init];
  13. if (self) {
  14. _image = image;
  15. _size = size;
  16. _document = docment;
  17. _pdfView = pdfView;
  18. }
  19. return self;
  20. }
  21. - (void)viewDidLoad {
  22. [super viewDidLoad];
  23. // Do any additional setup after loading the view.
  24. //setting navigation
  25. self.navigationItem.title = @"Add Page NUmber";
  26. self.navigationController.toolbarHidden = YES;
  27. self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneClick:)];
  28. self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelClick:)];
  29. //initialize model
  30. _modelData = [[CPDFHeaderFooterModel alloc] init];
  31. _modelData.fontSize = 18.0;
  32. _modelData.fontSelcet = 0;
  33. _modelData.fontPosition = 1;
  34. _modelData.pageStart = @"1";
  35. //add page image
  36. _headerFooterview = [[CPDFHeaderFooterAddView alloc] init];
  37. _imageView = [[UIImageView alloc] init];
  38. _imageView.image = self.image;
  39. CALayer *layer = [_imageView layer];
  40. layer.borderColor = [[UIColor blackColor] CGColor];
  41. layer.borderWidth = 1.0f;
  42. [self.view addSubview:_imageView];
  43. [self.view addSubview:_headerFooterview];
  44. [_imageView mas_makeConstraints:^(MASConstraintMaker *make) {
  45. make.top.equalTo(self.view.mas_top).offset(125);
  46. make.left.equalTo(self.view.mas_left).offset((393 / 2) - (self.size.width / 6));
  47. make.width.mas_equalTo(self.size.width / 3);
  48. make.height.mas_equalTo(self.size.height / 3);
  49. }];
  50. //add view
  51. [self.headerFooterview mas_makeConstraints:^(MASConstraintMaker *make) {
  52. make.top.equalTo(self.imageView.mas_bottom).offset(60);
  53. make.left.equalTo(self.view.mas_left);
  54. make.width.mas_equalTo(self.view.frame.size.width);
  55. make.height.mas_equalTo(self.view.frame.size.height);
  56. }];
  57. //UI event
  58. [_headerFooterview.localSegment addTarget:self action:@selector(changeLocation:) forControlEvents:UIControlEventValueChanged];
  59. [_headerFooterview.aligbmentSegment addTarget:self action:@selector(changeAligbment:) forControlEvents:UIControlEventValueChanged];
  60. [_headerFooterview.colorSlider addTarget:self action:@selector(sliderChange:) forControlEvents:UIControlEventValueChanged];
  61. [_headerFooterview.fontSizeText addTarget:self action:@selector(changeFontSize:) forControlEvents:UIControlEventEditingChanged];
  62. [_headerFooterview.pageIndexNumberText addTarget:self action:@selector(changePageStart:) forControlEvents:UIControlEventEditingChanged];
  63. [_headerFooterview.pageNumberText addTarget:self action:@selector(changeTableView:) forControlEvents:UIControlEventEditingDidBegin];
  64. }
  65. #pragma mark - CPDFHeaderFooterTextTableView's initialize
  66. //tableView initialize
  67. - (NSArray *)dataArray {
  68. if (!_dataArray) {
  69. _dataArray = [NSMutableArray array];
  70. NSArray *pageFormatArray = [[NSArray alloc] initWithObjects:@"1",@"page 1",@"1/n",@"1 of n",@"page 1 of n",nil];
  71. for (int i = 0; i < pageFormatArray.count; i++) {
  72. CPDFPageFomatModel *pageFormatMode = [[CPDFPageFomatModel alloc] init];
  73. pageFormatMode.pageFormat = pageFormatArray[i];
  74. [_dataArray addObject:pageFormatMode];
  75. }
  76. }
  77. return _dataArray;
  78. }
  79. - (void)changeTableView:(UITextField *)text {
  80. _pageFormat = [[CPDFHeaderFooterTextTableView alloc] initWithTitleName:@"Page Format"];
  81. _pageFormat.tableView.delegate = self;
  82. _pageFormat.tableView.dataSource = self;
  83. [self.headerFooterview addSubview:self.pageFormat];
  84. [self.view bringSubviewToFront:self.pageFormat];
  85. [_pageFormat mas_makeConstraints:^(MASConstraintMaker *make) {
  86. make.top.equalTo(self.headerFooterview.mas_top).offset(50);
  87. make.left.equalTo(self.headerFooterview.mas_left).offset(50);
  88. make.width.mas_equalTo(293);
  89. make.height.mas_equalTo(300);
  90. }];
  91. [self.pageFormat.okBtn addTarget:self action:@selector(pageFormatOk:) forControlEvents:UIControlEventTouchUpInside];
  92. }
  93. - (void)pageFormatOk:(UIButton *)okBtn {
  94. [self.pageFormat removeFromSuperview];
  95. }
  96. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  97. return self.dataArray.count;
  98. }
  99. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  100. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"pageFormat"];
  101. if (cell == nil) {
  102. cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"pageFormat"];
  103. }
  104. cell.textLabel.text = [self.dataArray[indexPath.row] pageFormat];
  105. return cell;
  106. }
  107. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  108. self.headerFooterview.pageNumberText.text = [self.dataArray[indexPath.row] pageFormat];
  109. self.modelData.fontSelcet = indexPath.row;
  110. self.showLabel.text = [self.dataArray[indexPath.row] pageFormat];
  111. }
  112. #pragma mark - done and cancel in CPDFHeaderFooterAddController's navigationItem
  113. //candel button enable
  114. - (void)cancelClick:(UIBarButtonItem *)btn {
  115. [self.navigationController popViewControllerAnimated:YES];
  116. }
  117. //done button enable
  118. - (void)doneClick:(UIBarButtonItem *)btn {
  119. NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:self.modelData,@"model", nil];
  120. NSNotification *notification = [NSNotification notificationWithName:@"getAddHeaderFooterModel" object:nil userInfo:dict];
  121. [[NSNotificationCenter defaultCenter] postNotification:notification];
  122. [self.navigationController popViewControllerAnimated:YES];
  123. }
  124. #pragma mark - model get value from UI
  125. //get page start for headerfooter's model
  126. - (void)changePageStart:(UITextField *)text {
  127. int start = [text.text intValue];
  128. self.modelData.pageStart = [NSString stringWithFormat:@"%d",start];
  129. }
  130. //get headerfoote's font size for headerfooter'model
  131. - (void)changeFontSize:(UITextField *)text {
  132. float size = [text.text floatValue];
  133. _showLabel.font = [UIFont systemFontOfSize:size / 3];
  134. _modelData.fontSize = size;
  135. }
  136. //slider select color
  137. - (void)sliderChange:(UISlider *)slider {
  138. switch ((int)slider.value / 10) {
  139. case 0:
  140. self.showLabel.textColor = [UIColor redColor];
  141. self.modelData.fontColor = [UIColor redColor];
  142. break;
  143. case 1:
  144. self.showLabel.textColor = [UIColor orangeColor];
  145. self.modelData.fontColor = [UIColor orangeColor];
  146. break;
  147. case 2:
  148. self.showLabel.textColor = [UIColor colorWithRed:239.0 / 255 green:140.0 / 255 blue:133.0 / 255 alpha:1];
  149. self.modelData.fontColor = [UIColor colorWithRed:239.0 / 255 green:140.0 / 255 blue:133.0 / 255 alpha:1];
  150. break;
  151. case 3:
  152. self.showLabel.textColor = [UIColor yellowColor];
  153. self.modelData.fontColor = [UIColor yellowColor];;
  154. break;
  155. case 4:
  156. self.showLabel.textColor = [UIColor greenColor];
  157. self.modelData.fontColor = [UIColor greenColor];
  158. break;
  159. case 5:
  160. self.showLabel.textColor = [UIColor blueColor];
  161. self.modelData.fontColor = [UIColor blueColor];
  162. break;
  163. case 6:
  164. self.showLabel.textColor = [UIColor purpleColor];
  165. self.modelData.fontColor = [UIColor purpleColor];
  166. break;
  167. case 7:
  168. self.showLabel.textColor = [UIColor colorWithRed:235.0 / 255 green:61.0 / 255 blue:133.0 / 255 alpha:1];
  169. self.modelData.fontColor = [UIColor colorWithRed:235.0 / 255 green:61.0 / 255 blue:133.0 / 255 alpha:1];
  170. break;
  171. case 8:
  172. self.showLabel.textColor = [UIColor blackColor];
  173. self.modelData.fontColor = [UIColor blackColor];
  174. break;
  175. case 9:
  176. self.showLabel.textColor = [UIColor whiteColor];
  177. self.modelData.fontColor = [UIColor whiteColor];
  178. break;
  179. default:
  180. break;
  181. }
  182. }
  183. //select headerfooter
  184. - (void)changeLocation:(UISegmentedControl *)sender {
  185. if (sender.selectedSegmentIndex == 0) {
  186. _position.location = kHeader;
  187. } else {
  188. _position.location = kFooter;
  189. }
  190. [self showPages];
  191. }
  192. //select aligment
  193. - (void)changeAligbment:(UISegmentedControl *)sender {
  194. if (sender.selectedSegmentIndex == 0) {
  195. _position.aligment = kLeft;
  196. } else if (sender.selectedSegmentIndex == 1) {
  197. _position.aligment = kCenter;
  198. } else {
  199. _position.aligment = kRinght;
  200. }
  201. [self showPages];
  202. }
  203. //show headerfooter and aligment
  204. - (void)showPages {
  205. if (_showLabel == nil) {
  206. _showLabel = [[UILabel alloc] init];
  207. }
  208. [_showLabel setText:@"1"];
  209. _showLabel.font = [UIFont systemFontOfSize:6];
  210. [self.imageView addSubview:self.showLabel];
  211. switch (self.position.location) {
  212. case kHeader:
  213. if (self.position.aligment == kLeft) {
  214. [_showLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  215. make.top.equalTo(_imageView.mas_top).offset(0.5);
  216. make.left.equalTo(self.imageView.mas_left).offset(0.5);
  217. make.height.mas_equalTo(10);
  218. make.width.mas_equalTo(10);
  219. }];
  220. self.modelData.fontPosition = 0;
  221. } else if (self.position.aligment == kCenter) {
  222. [_showLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  223. make.top.equalTo(_imageView.mas_top).offset(0.5);
  224. make.left.equalTo(self.imageView.mas_left).offset(self.size.width / 6);
  225. make.height.mas_equalTo(10);
  226. make.width.mas_equalTo(10);
  227. }];
  228. self.modelData.fontPosition = 1;
  229. } else {
  230. [_showLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  231. make.top.equalTo(self.imageView.mas_top).offset(0.5);
  232. make.left.equalTo(self.imageView.mas_left).offset(self.size.width / 3 - 12);
  233. make.height.mas_equalTo(10);
  234. make.width.mas_equalTo(10);
  235. }];
  236. self.modelData.fontPosition = 2;
  237. }
  238. break;
  239. case kFooter:
  240. if (self.position.aligment == kLeft) {
  241. [_showLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  242. make.top.equalTo(self.imageView.mas_top).offset(self.size.height / 3 - 12);
  243. make.left.equalTo(self.imageView.mas_left).offset(0.5);
  244. make.height.mas_equalTo(10);
  245. make.width.mas_equalTo(10);
  246. }];
  247. self.modelData.fontPosition = 3;
  248. } else if (self.position.aligment == kCenter) {
  249. [_showLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  250. make.top.equalTo(self.imageView.mas_top).offset(self.size.height / 3 - 12);
  251. make.left.equalTo(self.imageView.mas_left).offset(self.size.width/6);
  252. make.height.mas_equalTo(10);
  253. make.width.mas_equalTo(10);
  254. }];
  255. self.modelData.fontPosition = 4;
  256. } else {
  257. [_showLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
  258. make.top.equalTo(self.imageView.mas_top).offset(self.size.height / 3 - 12);
  259. make.left.equalTo(self.imageView.mas_left).offset(self.size.width / 3 - 12);
  260. make.height.mas_equalTo(10);
  261. make.width.mas_equalTo(10);
  262. }];
  263. self.modelData.fontPosition = 5;
  264. }
  265. break;
  266. default:
  267. break;
  268. }
  269. }
  270. #pragma mark - when orientation
  271. //when orientation
  272. - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
  273. if ([UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeRight) {
  274. [_imageView mas_remakeConstraints:^(MASConstraintMaker *make) {
  275. make.top.equalTo(self.view.mas_top).offset((393 / 2) - (self.size.height / 6));
  276. make.left.equalTo(self.view.mas_left).offset((393 / 2) - (self.size.width/6));
  277. make.width.mas_equalTo(self.size.width / 3);
  278. make.height.mas_equalTo(self.size.height / 3);
  279. }];
  280. //add view
  281. [self.headerFooterview mas_remakeConstraints:^(MASConstraintMaker *make) {
  282. make.top.equalTo(self.view.mas_top).offset(15);
  283. make.left.equalTo(self.view.mas_left).offset(self.view.frame.size.width / 2 + 200);
  284. make.width.mas_equalTo(393);
  285. make.height.mas_equalTo(self.view.frame.size.height - 20);
  286. }];
  287. } else if ([UIDevice currentDevice].orientation == UIDeviceOrientationPortrait) {
  288. [_imageView mas_remakeConstraints:^(MASConstraintMaker *make) {
  289. make.top.equalTo(self.view.mas_top).offset(125);
  290. make.left.equalTo(self.view.mas_left).offset((393 / 2) - (self.size.width / 6));
  291. make.width.mas_equalTo(self.size.width / 3);
  292. make.height.mas_equalTo(self.size.height / 3);
  293. }];
  294. //add view
  295. [self.headerFooterview mas_remakeConstraints:^(MASConstraintMaker *make) {
  296. make.top.equalTo(self.imageView.mas_bottom).offset(60);
  297. make.left.equalTo(self.view.mas_left);
  298. make.width.mas_equalTo(self.view.frame.size.width);
  299. make.height.mas_equalTo(self.view.frame.size.height);
  300. }];
  301. }
  302. }
  303. @end