| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 | ////  WMZBannerControl.m//  WMZBanner////  Created by wmz on 2019/9/6.//  Copyright © 2019 wmz. All rights reserved.//#import "WMZBannerControl.h"#define bannerPointSize CGSizeMake(8,8)@interface WMZBannerControl(){    NSInteger _numberOfPages;    NSInteger _currentPage;}@property(nonatomic,strong)NSMutableArray *imageArr;@end@implementation WMZBannerControl- (instancetype)initWithFrame:(CGRect)frame WithModel:(WMZBannerParam *)param{    if (self = [super initWithFrame:frame]) {        self.param = param;        self.userInteractionEnabled = NO;        self.currentPageIndicatorTintColor = param.wBannerControlSelectColor;        self.pageIndicatorTintColor = param.wBannerControlColor;        if (param.wBannerControlImage) {            self.inactiveImage = [UIImage imageNamed:param.wBannerControlImage];            self.inactiveImageSize = param.wBannerControlImageSize;            self.pageIndicatorTintColor = [UIColor clearColor];        }        if (param.wBannerControlSelectImage) {            self.currentImage = [UIImage imageNamed:param.wBannerControlSelectImage];            self.currentImageSize = param.wBannerControlSelectImageSize;            self.currentPageIndicatorTintColor = [UIColor clearColor];        }                [self resetFrame];    }    return self;}- (void)setCurrentPage:(NSInteger)currentPage{    _currentPage = currentPage;    [self updateDots];}- (void)setNumberOfPages:(NSInteger)numberOfPages{    _numberOfPages = numberOfPages;    [self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];\    UIView *tempView = nil;    for (int i = 0; i<numberOfPages; i++) {        UIView *bgView = [UIView new];                bgView.frame = CGRectMake(tempView?(CGRectGetMaxX(tempView.frame)+self.param.wBannerControlSelectMargin):self.param.wBannerControlSelectMargin, 0,self.frame.size.width/numberOfPages , self.frame.size.height);        [self addSubview:bgView];        UIImageView *imageView = [UIImageView new];        imageView.tag = 111;        [bgView addSubview:imageView];                UIView  *pointView = [UIImageView new];        [bgView addSubview:pointView];        pointView.tag = 222;        pointView.frame = CGRectMake((bgView.frame.size.width - bannerPointSize.width)/2, (bgView.frame.size.height - bannerPointSize.height)/2, bannerPointSize.width, bannerPointSize.height);        pointView.layer.backgroundColor = self.param.wBannerControlColor.CGColor;        pointView.layer.cornerRadius = pointView.frame.size.height/2;                tempView = bgView;    }}- (void)updateDots{    for (int i = 0; i < [self.subviews count]; i++) {        UIView *bgView = self.subviews[i];        UIImageView *dot = [bgView viewWithTag:111];        UIView *pointView = [bgView viewWithTag:222];        if (i == self.currentPage){           pointView.layer.backgroundColor = self.param.wBannerControlSelectColor.CGColor;           pointView.hidden = self.currentImage?YES:NO;           dot.hidden = self.currentImage?NO:YES;           if (self.currentImage) {               dot.image = self.currentImage;               CGRect rect = dot.frame;               rect.size = self.currentImageSize;               dot.frame = rect;               dot.layer.masksToBounds = YES;               dot.layer.cornerRadius =  self.param.wBannerControlImageRadius?:self. self.currentImageSize.height/2;           }        }else{            pointView.layer.backgroundColor = self.param.wBannerControlColor.CGColor;            pointView.hidden = self.inactiveImage?YES:NO;            dot.hidden = self.currentImage?NO:YES;            if (self.inactiveImage) {                dot.image = self.inactiveImage;                CGRect rect = dot.frame;                rect.size = self.inactiveImageSize;                dot.frame = rect;                dot.layer.masksToBounds = YES;                dot.layer.cornerRadius = self.param.wBannerControlImageRadius?:self. self.inactiveImageSize.height/2;            }        }    }    [self layoutSubviews];}- (void)layoutSubviews{    [super layoutSubviews];    if (self.param.wBannerControlImage&&self.param.wBannerControlSelectImage){        UIView *tmp = nil;        for (int i=0; i<[self.subviews count]; i++) {            UIView* dot = [self.subviews objectAtIndex:i];            CGFloat x = (tmp?CGRectGetMaxX(tmp.frame):0)+self.param.wBannerControlSelectMargin;            CGFloat y = 0;            if (i == self.currentPage) {                y = (self.bounds.size.height - self.currentImageSize.height)/2;                [dot setFrame:CGRectMake(x, y, self.currentImageSize.width, self.currentImageSize.height)];            }else {                y = (self.bounds.size.height - self.inactiveImageSize.height)/2;                [dot setFrame:CGRectMake(x, y, self.inactiveImageSize.width, self.inactiveImageSize.height)];            }            tmp = dot;            if (i == [self.subviews count]-1) {                CGRect rect = self.frame;                rect.size.width = CGRectGetMaxX(dot.frame);                rect.origin.x = (self.param.wFrame.size.width - rect.size.width)/2;                self.frame = rect;            }        }    }    [self resetFrame];}- (void)resetFrame{        for (int i=0; i<[self.subviews count]; i++) {        UIView* dot = [self.subviews objectAtIndex:i];        if (i == [self.subviews count]-1) {            CGRect rect = self.frame;            rect.size.width = CGRectGetMaxX(dot.frame);            rect.origin.x = (self.param.wFrame.size.width - rect.size.width)/2;            self.frame = rect;        }    }    if (self.param.wBannerControlPosition == BannerControlLeft) {          CGRect rect = self.frame;          rect.origin.x = 30;          self.frame = rect;      }      if (self.param.wBannerControlPosition == BannerControlRight) {          CGRect rect = self.frame;          rect.origin.x = self.superview.frame.size.width - rect.size.width  - 30;          self.frame = rect;      }      if (self.param.wCustomControl) {          self.param.wCustomControl(self);      }}- (NSMutableArray *)imageArr{    if (!_imageArr) {        _imageArr = [NSMutableArray new];    }    return _imageArr;}@end
 |