WMZBannerControl.m 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. //
  2. // WMZBannerControl.m
  3. // WMZBanner
  4. //
  5. // Created by wmz on 2019/9/6.
  6. // Copyright © 2019 wmz. All rights reserved.
  7. //
  8. #import "WMZBannerControl.h"
  9. #define bannerPointSize CGSizeMake(8,8)
  10. @interface WMZBannerControl()
  11. {
  12. NSInteger _numberOfPages;
  13. NSInteger _currentPage;
  14. }
  15. @property(nonatomic,strong)NSMutableArray *imageArr;
  16. @end
  17. @implementation WMZBannerControl
  18. - (instancetype)initWithFrame:(CGRect)frame WithModel:(WMZBannerParam *)param{
  19. if (self = [super initWithFrame:frame]) {
  20. self.param = param;
  21. self.userInteractionEnabled = NO;
  22. self.currentPageIndicatorTintColor = param.wBannerControlSelectColor;
  23. self.pageIndicatorTintColor = param.wBannerControlColor;
  24. if (param.wBannerControlImage) {
  25. self.inactiveImage = [UIImage imageNamed:param.wBannerControlImage];
  26. self.inactiveImageSize = param.wBannerControlImageSize;
  27. self.pageIndicatorTintColor = [UIColor clearColor];
  28. }
  29. if (param.wBannerControlSelectImage) {
  30. self.currentImage = [UIImage imageNamed:param.wBannerControlSelectImage];
  31. self.currentImageSize = param.wBannerControlSelectImageSize;
  32. self.currentPageIndicatorTintColor = [UIColor clearColor];
  33. }
  34. [self resetFrame];
  35. }
  36. return self;
  37. }
  38. - (void)setCurrentPage:(NSInteger)currentPage{
  39. _currentPage = currentPage;
  40. [self updateDots];
  41. }
  42. - (void)setNumberOfPages:(NSInteger)numberOfPages{
  43. _numberOfPages = numberOfPages;
  44. [self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];\
  45. UIView *tempView = nil;
  46. for (int i = 0; i<numberOfPages; i++) {
  47. UIView *bgView = [UIView new];
  48. bgView.frame = CGRectMake(tempView?(CGRectGetMaxX(tempView.frame)+self.param.wBannerControlSelectMargin):self.param.wBannerControlSelectMargin, 0,self.frame.size.width/numberOfPages , self.frame.size.height);
  49. [self addSubview:bgView];
  50. UIImageView *imageView = [UIImageView new];
  51. imageView.tag = 111;
  52. [bgView addSubview:imageView];
  53. UIView *pointView = [UIImageView new];
  54. [bgView addSubview:pointView];
  55. pointView.tag = 222;
  56. pointView.frame = CGRectMake((bgView.frame.size.width - bannerPointSize.width)/2, (bgView.frame.size.height - bannerPointSize.height)/2, bannerPointSize.width, bannerPointSize.height);
  57. pointView.layer.backgroundColor = self.param.wBannerControlColor.CGColor;
  58. pointView.layer.cornerRadius = pointView.frame.size.height/2;
  59. tempView = bgView;
  60. }
  61. }
  62. - (void)updateDots{
  63. for (int i = 0; i < [self.subviews count]; i++) {
  64. UIView *bgView = self.subviews[i];
  65. UIImageView *dot = [bgView viewWithTag:111];
  66. UIView *pointView = [bgView viewWithTag:222];
  67. if (i == self.currentPage){
  68. pointView.layer.backgroundColor = self.param.wBannerControlSelectColor.CGColor;
  69. pointView.hidden = self.currentImage?YES:NO;
  70. dot.hidden = self.currentImage?NO:YES;
  71. if (self.currentImage) {
  72. dot.image = self.currentImage;
  73. CGRect rect = dot.frame;
  74. rect.size = self.currentImageSize;
  75. dot.frame = rect;
  76. dot.layer.masksToBounds = YES;
  77. dot.layer.cornerRadius = self.param.wBannerControlImageRadius?:self. self.currentImageSize.height/2;
  78. }
  79. }else{
  80. pointView.layer.backgroundColor = self.param.wBannerControlColor.CGColor;
  81. pointView.hidden = self.inactiveImage?YES:NO;
  82. dot.hidden = self.currentImage?NO:YES;
  83. if (self.inactiveImage) {
  84. dot.image = self.inactiveImage;
  85. CGRect rect = dot.frame;
  86. rect.size = self.inactiveImageSize;
  87. dot.frame = rect;
  88. dot.layer.masksToBounds = YES;
  89. dot.layer.cornerRadius = self.param.wBannerControlImageRadius?:self. self.inactiveImageSize.height/2;
  90. }
  91. }
  92. }
  93. [self layoutSubviews];
  94. }
  95. - (void)layoutSubviews
  96. {
  97. [super layoutSubviews];
  98. if (self.param.wBannerControlImage&&self.param.wBannerControlSelectImage){
  99. UIView *tmp = nil;
  100. for (int i=0; i<[self.subviews count]; i++) {
  101. UIView* dot = [self.subviews objectAtIndex:i];
  102. CGFloat x = (tmp?CGRectGetMaxX(tmp.frame):0)+self.param.wBannerControlSelectMargin;
  103. CGFloat y = 0;
  104. if (i == self.currentPage) {
  105. y = (self.bounds.size.height - self.currentImageSize.height)/2;
  106. [dot setFrame:CGRectMake(x, y, self.currentImageSize.width, self.currentImageSize.height)];
  107. }else {
  108. y = (self.bounds.size.height - self.inactiveImageSize.height)/2;
  109. [dot setFrame:CGRectMake(x, y, self.inactiveImageSize.width, self.inactiveImageSize.height)];
  110. }
  111. tmp = dot;
  112. if (i == [self.subviews count]-1) {
  113. CGRect rect = self.frame;
  114. rect.size.width = CGRectGetMaxX(dot.frame);
  115. rect.origin.x = (self.param.wFrame.size.width - rect.size.width)/2;
  116. self.frame = rect;
  117. }
  118. }
  119. }
  120. [self resetFrame];
  121. }
  122. - (void)resetFrame{
  123. for (int i=0; i<[self.subviews count]; i++) {
  124. UIView* dot = [self.subviews objectAtIndex:i];
  125. if (i == [self.subviews count]-1) {
  126. CGRect rect = self.frame;
  127. rect.size.width = CGRectGetMaxX(dot.frame);
  128. rect.origin.x = (self.param.wFrame.size.width - rect.size.width)/2;
  129. self.frame = rect;
  130. }
  131. }
  132. if (self.param.wBannerControlPosition == BannerControlLeft) {
  133. CGRect rect = self.frame;
  134. rect.origin.x = 30;
  135. self.frame = rect;
  136. }
  137. if (self.param.wBannerControlPosition == BannerControlRight) {
  138. CGRect rect = self.frame;
  139. rect.origin.x = self.superview.frame.size.width - rect.size.width - 30;
  140. self.frame = rect;
  141. }
  142. if (self.param.wCustomControl) {
  143. self.param.wCustomControl(self);
  144. }
  145. }
  146. - (NSMutableArray *)imageArr{
  147. if (!_imageArr) {
  148. _imageArr = [NSMutableArray new];
  149. }
  150. return _imageArr;
  151. }
  152. @end