226 lines
7.8 KiB
Objective-C
226 lines
7.8 KiB
Objective-C
//
|
|
// MXSCycleScrollView.m
|
|
// xuexin
|
|
// e-mail:rbyyy924805@163.com
|
|
// Created by renbing on 3/7/14.
|
|
// Copyright (c) 2014 renbing. 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 "MXSCycleScrollView.h"
|
|
|
|
@implementation MXSCycleScrollView
|
|
|
|
@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/5)*7);
|
|
_scrollView.showsHorizontalScrollIndicator = NO;
|
|
_scrollView.showsVerticalScrollIndicator = NO;
|
|
_scrollView.contentOffset = CGPointMake(0, (self.bounds.size.height/5));
|
|
|
|
[self addSubview:_scrollView];
|
|
}
|
|
return self;
|
|
}
|
|
//设置初始化页数
|
|
- (void)setCurrentSelectPage:(NSInteger)selectPage
|
|
{
|
|
_curPage = selectPage;
|
|
}
|
|
|
|
- (void)setDataource:(id<MXSCycleScrollViewDatasource>)datasource
|
|
{
|
|
_datasource = datasource;
|
|
//[self reloadData];
|
|
}
|
|
|
|
- (void)reloadData
|
|
{
|
|
_totalPages = [_datasource numberOfPages:self];
|
|
if (_totalPages == 0) {
|
|
//return;
|
|
_totalPages = 1;
|
|
}
|
|
[self loadData];
|
|
}
|
|
|
|
- (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 < 7; i++) {
|
|
UIView *v = [_curViews objectAtIndex:i];
|
|
// v.userInteractionEnabled = YES;
|
|
// UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self
|
|
// action:@selector(handleTap:)];
|
|
// [v addGestureRecognizer:singleTap];
|
|
v.frame = CGRectOffset(v.frame, 0, v.frame.size.height * i );
|
|
[_scrollView addSubview:v];
|
|
}
|
|
|
|
[_scrollView setContentOffset:CGPointMake( 0, (self.bounds.size.height/5) )];
|
|
}
|
|
|
|
- (void)getDisplayImagesWithCurpage:(int)page {
|
|
int pre1 = [self validPageValue:_curPage-3];
|
|
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];
|
|
int last = [self validPageValue:_curPage+3];
|
|
|
|
if (!_curViews) {
|
|
_curViews = [[NSMutableArray alloc] init];
|
|
}
|
|
|
|
[_curViews removeAllObjects];
|
|
|
|
[_curViews addObject:[_datasource pageAtIndex:pre1 andScrollView:self]];
|
|
[_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]];
|
|
[_curViews addObject:[_datasource pageAtIndex:last andScrollView:self]];
|
|
}
|
|
|
|
- (int)validPageValue:(NSInteger)value {
|
|
if(value == -3) value = _totalPages-3;
|
|
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 < 7; i++) {
|
|
UIView *v = [_curViews objectAtIndex:i];
|
|
v.userInteractionEnabled = YES;
|
|
// UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self
|
|
// action:@selector(handleTap:)];
|
|
// [v addGestureRecognizer:singleTap];
|
|
v.frame = CGRectOffset(v.frame, 0, v.frame.size.height * i);
|
|
[_scrollView addSubview:v];
|
|
}
|
|
}
|
|
}
|
|
|
|
- (void)setAfterScrollShowView:(UIScrollView*)scrollview andCurrentPage:(NSInteger)pageNumber
|
|
{
|
|
UILabel *oneLabel = (UILabel*)[[scrollview subviews] objectAtIndex:pageNumber];
|
|
[oneLabel setFont:[UIFont systemFontOfSize:14]];
|
|
[oneLabel setTextColor:RGBA(186.0, 186.0, 186.0, 1.0)];
|
|
UILabel *twoLabel = (UILabel*)[[scrollview subviews] objectAtIndex:pageNumber+1];
|
|
[twoLabel setFont:[UIFont systemFontOfSize:16]];
|
|
[twoLabel setTextColor:RGBA(113.0, 113.0, 113.0, 1.0)];
|
|
|
|
UILabel *currentLabel = (UILabel*)[[scrollview subviews] objectAtIndex:pageNumber+2];
|
|
[currentLabel setFont:[UIFont systemFontOfSize:18]];
|
|
[currentLabel setTextColor:RGBA(32.0, 94.0, 252.0, 1.0)];
|
|
|
|
UILabel *threeLabel = (UILabel*)[[scrollview subviews] objectAtIndex:pageNumber+3];
|
|
[threeLabel setFont:[UIFont systemFontOfSize:16]];
|
|
[threeLabel setTextColor:RGBA(113.0, 113.0, 113.0, 1.0)];
|
|
UILabel *fourLabel = (UILabel*)[[scrollview subviews] objectAtIndex:pageNumber+4];
|
|
[fourLabel setFont:[UIFont systemFontOfSize:14]];
|
|
[fourLabel setTextColor:RGBA(186.0, 186.0, 186.0, 1.0)];
|
|
}
|
|
|
|
#pragma mark - UIScrollViewDelegate
|
|
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView {
|
|
int y = aScrollView.contentOffset.y;
|
|
NSInteger page = aScrollView.contentOffset.y/((self.bounds.size.height/5));
|
|
//NSLog(@"第%d页",page);
|
|
|
|
if (y>2*(self.bounds.size.height/5)) {
|
|
_curPage = [self validPageValue:_curPage+1];
|
|
[self loadData];
|
|
}
|
|
if (y<=0) {
|
|
_curPage = [self validPageValue:_curPage-1];
|
|
[self loadData];
|
|
}
|
|
// //往下翻一张
|
|
// if(x >= (4*self.frame.size.width)) {
|
|
// _curPage = [self validPageValue:_curPage+1];
|
|
// [self loadData];
|
|
// }
|
|
//
|
|
// //往上翻
|
|
// if(x <= 0) {
|
|
//
|
|
// }
|
|
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/5)) 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/5)) animated:YES];
|
|
[self setAfterScrollShowView:scrollView andCurrentPage:1];
|
|
// if ([_delegate respondsToSelector:@selector(scrollviewDidChangeNumber)]) {
|
|
// [_delegate scrollviewDidChangeNumber];
|
|
// }
|
|
if ([_delegate respondsToSelector:@selector(scrollviewDidEndChangeNumber)]) {
|
|
[_delegate scrollviewDidEndChangeNumber];
|
|
}
|
|
}
|
|
|
|
@end
|