123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- //
- // SPSBAdvertisementBannerScrollView.m
- // 我的社保
- //
- // Created by shanp on 2021/5/10.
- //
- #import "SPSBAdvertisementBannerScrollView.h"
- #import "SPSBUIGeneralHeader.h"
- @interface SPSBAdvertisementBannerScrollView ()<UIScrollViewDelegate> {
- NSInteger _pageCount;
- NSArray<UIImage *> *_imageArray;
-
- UIView *_pageControlView;
- UIView *_pageControlFlag;
-
- CGFloat _scrollViewWidth;
-
- UIScrollView *_imageScrollView;
- NSTimer *_timer;
- }
- @end
- #define leadingInterval 16
- @implementation SPSBAdvertisementBannerScrollView
- - (instancetype)init {
- self = [super init];
- if (!self) return nil;
- _pageCount = 0;
- _scrollViewWidth = jxh_screenWidth() - leadingInterval * 2;
- [self addImageView];
- [self addPageControl];
- [self addTimer];
- _imageScrollView.contentOffset = CGPointMake(_scrollViewWidth, _imageScrollView.contentOffset.y);
- return self;
- }
- - (void)addImageView {
- if (_imageScrollView) [_imageScrollView removeFromSuperview];
- if (_pageCount == 0) return;
- UIImage *image = _imageArray[0];
- _spsb_height = _scrollViewWidth * (image.size.height / image.size.width);
-
- _imageScrollView = [UIScrollView convenienceWithBackgroundColor:spsb_FFFFFF_color(1.f)];
- _imageScrollView.scrollsToTop = false;
- _imageScrollView.delegate = self;
- _imageScrollView.pagingEnabled = true;
- [self addSubview:_imageScrollView];
- //添加显示的图片
- for (NSInteger i = 1; i < _pageCount + 1; i ++) {
- UIImageView *imageView = UIImageView.new;
- imageView.contentMode = UIViewContentModeScaleAspectFill;
- imageView.clipsToBounds = true;
- imageView.tag = 2000 + i;
- imageView.backgroundColor = [UIColor whiteColor];
- if (_imageArray && _imageArray.count > i - 1) {
- imageView.image = _imageArray[i - 1];
- }
- [_imageScrollView addSubview:imageView];
- if (i == _pageCount) {
- [imageView makeConstraints:^(JXHConstraintMaker *make) {
- make.leading.equalTo(i * self->_scrollViewWidth);
- make.top.equalTo(0);
- make.size.equalTo(CGSizeMake(self->_scrollViewWidth, self->_spsb_height));
- make.trailing.equalTo(-self->_scrollViewWidth);
- }];
- } else {
- [imageView makeConstraints:^(JXHConstraintMaker *make) {
- make.leading.equalTo(i * self->_scrollViewWidth);
- make.top.equalTo(0);
- make.size.equalTo(CGSizeMake(self->_scrollViewWidth, self->_spsb_height));
- }];
- }
- imageView.userInteractionEnabled = true;
- UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
- [imageView addGestureRecognizer:tap];
-
- }
- //添加循环用得图片
- for (NSInteger i = 0; i < 2; i ++) {
- UIImageView *imageView = [[UIImageView alloc] init];
- imageView.contentMode = UIViewContentModeScaleAspectFill;
- imageView.backgroundColor = [UIColor whiteColor];
- imageView.clipsToBounds = true;
- if (_imageArray && _imageArray.count > i * (_pageCount - 1)) {
- imageView.image = _imageArray[i * (_pageCount - 1)];
- }
- [_imageScrollView addSubview:imageView];
- [imageView makeConstraints:^(JXHConstraintMaker *make) {
- make.leading.equalTo((1 - i) * (self->_pageCount + 1) * self->_scrollViewWidth);
- make.top.equalTo(0);
- make.size.equalTo(CGSizeMake(self->_scrollViewWidth, self->_spsb_height));
- }];
- }
- if (_pageCount == 1) {
- _imageScrollView.scrollEnabled = false;
- }
- [_imageScrollView makeConstraints:^(JXHConstraintMaker *make) {
- make.edges.equalTo(self);
- make.size.equalTo(CGSizeMake(self->_scrollViewWidth, self->_spsb_height));
- }];
- _imageScrollView.contentSize = CGSizeMake(_scrollViewWidth * (_pageCount + 2), self->_spsb_height);
- }
- - (void)tapAction:(UIGestureRecognizer *)sender {
- [self.spsb_advertisementViewDelegate advertisementView:self selectImageWithIndex:sender.view.tag - 2001];
- }
- - (void)addPageControl {
- if (_pageControlView) {
- [_pageControlView removeFromSuperview];
- _pageControlView = nil;
- }
- if (_pageCount < 2) return;
- _pageControlView = [[UIView alloc] init];
- [self addSubview:_pageControlView];
- [_pageControlView makeConstraints:^(JXHConstraintMaker *make) {
- make.bottom.equalTo(-8);
- make.centerX.equalTo(self);
- }];
- UIView *tempView = nil;
- for (NSInteger i = 0; i < _pageCount; i ++) {
- UIView *view = [[UIView alloc] init];
- view.backgroundColor = [UIColor colorWithWhite:1 alpha:0.7];
- view.tag = 3000 + i;
- [_pageControlView addSubview:view];
- [view makeConstraints:^(JXHConstraintMaker *make) {
- make.top.and.bottom.equalTo(0);
- if (tempView) {
- make.leading.equalTo(tempView.trailing).offset(8);
- } else {
- make.leading.equalTo(0);
- }
- make.size.equalTo(CGSizeMake(4, 3));
- }];
-
- tempView = view;
- }
- [tempView makeConstraints:^(JXHConstraintMaker *make) {
- make.trailing.equalTo(0);
- }];
-
- _pageControlFlag = [[UIView alloc] init];
- _pageControlFlag.backgroundColor = [UIColor whiteColor];
- [_pageControlView addSubview:_pageControlFlag];
- [_pageControlFlag makeConstraints:^(JXHConstraintMaker *make) {
- make.top.equalTo(0);
- make.centerX.equalTo([self->_pageControlView viewWithTag:3000]);
- make.size.equalTo(CGSizeMake(10, 3));
- }];
- }
- - (void)setControlViewIndex:(NSInteger)index {
- if (index >= _pageCount) return;
- [_pageControlFlag remakeConstraints:^(JXHConstraintMaker *make) {
- make.top.equalTo(0);
- make.centerX.equalTo([self->_pageControlView viewWithTag:3000 + index]);
- make.size.equalTo(CGSizeMake(10, 3));
- }];
- [UIView animateWithDuration:0.3 animations:^{
- [self->_pageControlView layoutSubviews];
- }];
- }
- - (void)reloadDataWithArray:(NSArray<UIImage *> *)array {
- _imageArray = array;
- _pageCount = array.count;
- NSInteger temp = _imageScrollView.contentOffset.x / _scrollViewWidth;
- [self addImageView];
- [self addPageControl];
- if (array.count == 0) return;
- if (temp > _pageCount) temp = _pageCount;
- if (temp == 0) temp = 1;
- _imageScrollView.contentOffset = CGPointMake(temp * _scrollViewWidth, _imageScrollView.contentOffset.y);
-
- }
- - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
- [_timer invalidate];
- _timer = nil;
- }
- - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
- [self addTimer];
- }
- - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
- if (_pageCount > 1) {
- if (scrollView.contentOffset.x >= _scrollViewWidth * (_pageCount + 1)) {
- scrollView.contentOffset = CGPointMake(_scrollViewWidth, scrollView.contentOffset.y);
- } else if (scrollView.contentOffset.x <= 0) {
- scrollView.contentOffset = CGPointMake(_scrollViewWidth * _pageCount, scrollView.contentOffset.y);
- }
- }
- if (_pageControlView) {
- [self setControlViewIndex: scrollView.contentOffset.x / _scrollViewWidth - 1];
- }
- }
- - (void)addTimer {
- _timer = [NSTimer scheduledTimerWithTimeInterval:6 target:self selector:@selector(circulateToScroll) userInfo:nil repeats:true];
- }
- - (void)circulateToScroll {
- if (_pageCount < 2) return;
- [UIView animateWithDuration:0.5 animations:^{
- self->_imageScrollView.contentOffset = CGPointMake(self->_imageScrollView.contentOffset.x + self->_scrollViewWidth - 1, self->_imageScrollView.contentOffset.y);
- } completion:^(BOOL finished) {
- NSInteger inter = self->_imageScrollView.contentOffset.x / self->_scrollViewWidth;
- CGFloat cgfloat = self->_imageScrollView.contentOffset.x / self->_scrollViewWidth;
- self->_imageScrollView.contentOffset = CGPointMake(cgfloat == inter ? self->_imageScrollView.contentOffset.x : self->_scrollViewWidth * (inter + 1), self->_imageScrollView.contentOffset.y);
- }];
- }
- - (void)dealloc {
- [_timer invalidate];
- _timer = nil;
- }
- @end
- #undef leadingInterval
|