213 lines
6.6 KiB
Objective-C
213 lines
6.6 KiB
Objective-C
//
|
|
// 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<MXSCycleScrollView3Datasource>)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
|