SegmentView.m 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. //
  2. // CentersegmentHeaderView.m
  3. // PersonalCenter
  4. //
  5. // Created by Arch on 2017/6/16.
  6. // Copyright © 2017年 mint_bin. All rights reserved.
  7. //
  8. #import "SegmentView.h"
  9. #import "SegmentHeaderView.h"
  10. //#define kWidth self.frame.size.width
  11. //#define kHeight self.frame.size.height
  12. @interface SegmentView () <UIScrollViewDelegate>
  13. @property (nonatomic, strong) SegmentHeaderView *headerView;
  14. @property (nonatomic, strong) UIScrollView *contentScrollView;
  15. @end
  16. @implementation SegmentView
  17. #pragma mark - Life
  18. - (instancetype)initWithFrame:(CGRect)frame controllers:(NSArray *)controllers titleArray:(NSArray *)titleArray parentController:(UIViewController *)parentController {
  19. if ( self = [super initWithFrame:frame]) {
  20. self.frame = frame;
  21. self.headerView = [[SegmentHeaderView alloc] initWithFrame:CGRectMake(0, 0, kWidth, SegmentHeaderViewHeight) titleArray:titleArray];
  22. [self addSubview:self.headerView];
  23. [self.headerView mas_makeConstraints:^(MASConstraintMaker *make) {
  24. make.top.left.right.mas_equalTo(0);
  25. make.height.mas_equalTo(SegmentHeaderViewHeight);
  26. }];
  27. __weak typeof(self) weakSelf = self;
  28. weakSelf.headerView.selectedItemHelper = ^(NSUInteger index) {
  29. __strong typeof(weakSelf) strongSelf = weakSelf;
  30. [strongSelf.contentScrollView setContentOffset:CGPointMake(index * kWidth, 0) animated:NO];
  31. [[NSNotificationCenter defaultCenter] postNotificationName:CurrentSelectedChildViewControllerIndex object:nil userInfo:@{@"selectedPageIndex" : @(index)}];
  32. };
  33. self.contentScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, SegmentHeaderViewHeight, kWidth, kHeight-SegmentHeaderViewHeight)];
  34. self.contentScrollView.contentSize = CGSizeMake(kWidth * controllers.count, 0);
  35. self.contentScrollView.delegate = self;
  36. self.contentScrollView.showsHorizontalScrollIndicator = NO;
  37. self.contentScrollView.pagingEnabled = YES;
  38. self.contentScrollView.bounces = NO;
  39. [self addSubview:self.contentScrollView];
  40. [controllers enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
  41. UIViewController *controller = obj;
  42. [self.contentScrollView addSubview:controller.view];
  43. controller.view.frame = CGRectMake(idx * kWidth, 0, kWidth, kHeight);
  44. [parentController addChildViewController:controller];
  45. [controller didMoveToParentViewController:parentController];
  46. }];
  47. }
  48. return self;
  49. }
  50. #pragma mark - Setter
  51. - (void)setSelectedIndex:(NSUInteger)selectedIndex {
  52. _selectedIndex = selectedIndex;
  53. self.headerView.selectedIndex = selectedIndex;
  54. [[NSNotificationCenter defaultCenter] postNotificationName:CurrentSelectedChildViewControllerIndex object:nil userInfo:@{@"selectedPageIndex" : @(selectedIndex)}];
  55. }
  56. #pragma mark - UIScrollViewDelegate
  57. //增加分页视图左右滑动和外界tableView上下滑动互斥处理
  58. - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
  59. [[NSNotificationCenter defaultCenter] postNotificationName:IsEnablePersonalCenterVCMainTableViewScroll object:nil userInfo:@{@"canScroll" : @"0"}];
  60. }
  61. - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
  62. [[NSNotificationCenter defaultCenter] postNotificationName:IsEnablePersonalCenterVCMainTableViewScroll object:nil userInfo:@{@"canScroll" : @"1"}];
  63. }
  64. - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
  65. NSUInteger selectedIndex = (NSUInteger)self.contentScrollView.contentOffset.x / kWidth;
  66. [self.headerView changeItemWithTargetIndex:selectedIndex];
  67. [[NSNotificationCenter defaultCenter] postNotificationName:CurrentSelectedChildViewControllerIndex object:nil userInfo:@{@"selectedPageIndex" : @(selectedIndex)}];
  68. }
  69. @end