// // MXSCycleScrollView3.m // 2cu // // Created by 高琦 on 15/2/9. // Copyright (c) 2015年 guojunyi. All rights reserved. // #define RGBA(r,g,b,a) [UIColor colorWithRed:(float)r/255.0f green:(float)g/255.0f blue:(float)b/255.0f alpha:(float)a] #import "MXSCycleScrollView3.h" @implementation MXSCycleScrollView3 @synthesize scrollView = _scrollView; @synthesize currentPage = _curPage; @synthesize datasource = _datasource; @synthesize delegate = _delegate; - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code _scrollView = [[UIScrollView alloc] initWithFrame:self.bounds]; _scrollView.delegate = self; _scrollView.contentSize = CGSizeMake(self.bounds.size.width, (self.bounds.size.height/3)*5); _scrollView.showsHorizontalScrollIndicator = NO; _scrollView.showsVerticalScrollIndicator = NO; _scrollView.contentOffset = CGPointMake(0, (self.bounds.size.height/3)); [self addSubview:_scrollView]; } return self; } //设置初始化页数 - (void)setCurrentSelectPage:(NSInteger)selectPage { _curPage = selectPage; } - (void)setDataource:(id)datasource { _datasource = datasource; //[self reloadData]; } - (void)reloadData { _totalPages = [_datasource numberOfPages:self]; if (_totalPages == 0) { //return; _totalPages = 1; } [self loadData]; [self setAfterScrollShowView:_scrollView andCurrentPage:1]; } - (void)loadData { //从scrollView上移除所有的subview NSArray *subViews = [_scrollView subviews]; if([subViews count] != 0) { [subViews makeObjectsPerformSelector:@selector(removeFromSuperview)]; } [self getDisplayImagesWithCurpage:(int)_curPage]; for (int i = 0; i < 5; i++) { UIView *v = [_curViews objectAtIndex:i]; v.frame = CGRectOffset(v.frame, 0, v.frame.size.height * i ); [_scrollView addSubview:v]; } [_scrollView setContentOffset:CGPointMake( 0, (self.bounds.size.height/3) )]; } - (void)getDisplayImagesWithCurpage:(int)page { int pre2 = [self validPageValue:_curPage-2]; int pre3 = [self validPageValue:_curPage-1]; int pre4 = [self validPageValue:_curPage]; int pre5 = [self validPageValue:_curPage+1]; int pre = [self validPageValue:_curPage+2]; if (!_curViews) { _curViews = [[NSMutableArray alloc] init]; } [_curViews removeAllObjects]; [_curViews addObject:[_datasource pageAtIndex:pre2 andScrollView:self]]; [_curViews addObject:[_datasource pageAtIndex:pre3 andScrollView:self]]; [_curViews addObject:[_datasource pageAtIndex:pre4 andScrollView:self]]; [_curViews addObject:[_datasource pageAtIndex:pre5 andScrollView:self]]; [_curViews addObject:[_datasource pageAtIndex:pre andScrollView:self]]; } - (int)validPageValue:(NSInteger)value { if(value == -2) value = _totalPages-2; if(value == -1 ) value = _totalPages - 1; if(value == _totalPages+1) value = 1; if (value == _totalPages+2) value = 2; if(value == _totalPages+3) value = 3; if (value == _totalPages+4) value = 4; if(value == _totalPages) value = 0; return (int)value; } - (void)handleTap:(UITapGestureRecognizer *)tap { if ([_delegate respondsToSelector:@selector(didClickPage:atIndex:)]) { [_delegate didClickPage:self atIndex:_curPage]; } } - (void)setViewContent:(UIView *)view atIndex:(NSInteger)index { if (index == _curPage) { [_curViews replaceObjectAtIndex:1 withObject:view]; for (int i = 0; i < 5; i++) { UIView *v = [_curViews objectAtIndex:i]; v.userInteractionEnabled = YES; v.frame = CGRectOffset(v.frame, 0, v.frame.size.height * i); [_scrollView addSubview:v]; } } } - (void)setAfterScrollShowView:(UIScrollView*)scrollview andCurrentPage:(NSInteger)pageNumber { UILabel *twoLabel = (UILabel*)[[scrollview subviews] objectAtIndex:pageNumber]; [twoLabel setFont:[UIFont systemFontOfSize:16]]; [twoLabel setTextColor:RGBA(113.0, 113.0, 113.0, 1.0)]; UILabel *currentLabel = (UILabel*)[[scrollview subviews] objectAtIndex:pageNumber+1]; [currentLabel setFont:[UIFont systemFontOfSize:18]]; [currentLabel setTextColor:RGBA(32.0, 94.0, 252.0, 1.0)]; UILabel *threeLabel = (UILabel*)[[scrollview subviews] objectAtIndex:pageNumber+2]; [threeLabel setFont:[UIFont systemFontOfSize:16]]; [threeLabel setTextColor:RGBA(113.0, 113.0, 113.0, 1.0)]; } #pragma mark - UIScrollViewDelegate - (void)scrollViewDidScroll:(UIScrollView *)aScrollView { int y = aScrollView.contentOffset.y; NSInteger page = aScrollView.contentOffset.y/((self.bounds.size.height/3)); //NSLog(@"第%d页",page); if (y>2*(self.bounds.size.height/3)) { _curPage = [self validPageValue:_curPage+1]; [self loadData]; } if (y<=0) { _curPage = [self validPageValue:_curPage-1]; [self loadData]; } if (page>1 || page <=0) { [self setAfterScrollShowView:aScrollView andCurrentPage:1]; } if ([_delegate respondsToSelector:@selector(scrollviewDidChangeNumber)]) { [_delegate scrollviewDidChangeNumber]; } } - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { [self setAfterScrollShowView:scrollView andCurrentPage:1]; } - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { [_scrollView setContentOffset:CGPointMake(0, (self.bounds.size.height/3)) animated:YES]; [self setAfterScrollShowView:scrollView andCurrentPage:1]; if ([_delegate respondsToSelector:@selector(scrollviewDidEndChangeNumber)]) { [_delegate scrollviewDidEndChangeNumber]; } } - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView { [self setAfterScrollShowView:scrollView andCurrentPage:1]; } - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { [_scrollView setContentOffset:CGPointMake(0, (self.bounds.size.height/3)) animated:YES]; [self setAfterScrollShowView:scrollView andCurrentPage:1]; // if ([_delegate respondsToSelector:@selector(scrollviewDidChangeNumber)]) { // [_delegate scrollviewDidChangeNumber]; // } if ([_delegate respondsToSelector:@selector(scrollviewDidEndChangeNumber)]) { [_delegate scrollviewDidEndChangeNumber]; } } /* // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { // Drawing code } */ @end