ifish/Ifish/controllers/IfishYooseeFile/IfishYooseeHelper/P2pPalybackViewPicView/MXSCycleScrollView3.m

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