Initial commit

This commit is contained in:
ifish
2017-08-15 16:59:01 +08:00
commit bdc83e07ef
5766 changed files with 423223 additions and 0 deletions
@@ -0,0 +1,42 @@
//
// CyclePickerView.h
// RBCustomDateTimePicker
//
// Created by 高琦 on 15/1/22.
// Copyright (c) 2015年 renbing. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "MXSCycleScrollView.h"
@protocol CyclePickerViewDatasource;
@protocol CyclePickerViewDelegate;
@interface CyclePickerView : UIView<MXSCycleScrollViewDatasource,MXSCycleScrollViewDelegate>
@property (nonatomic, assign) id<CyclePickerViewDatasource> datasource;
@property (nonatomic, assign) id<CyclePickerViewDelegate> delegate;
@property (nonatomic,strong) NSMutableArray * scrollWidthProportion;//每一列所占的宽度比例
@property (nonatomic,strong) NSMutableArray * numberOfCellsInScroll;//每一列滚轮上cell的个数
@property (nonatomic,strong) NSMutableArray * scrollviews;
@property (nonatomic,copy) NSString * scrollWidthstring;
@property (nonatomic,strong) NSArray * valueOfCellsInScroll;
- (void)setAfterScrollShowView:(MXSCycleScrollView*)scrollview andCurrentPage:(NSInteger)pageNumber;
- (void)reloadScroll;
//设置默认选中的Cell
- (void)selectCell:(NSUInteger)cell inScroll:(NSUInteger)scroll;
@end
@protocol CyclePickerViewDatasource<NSObject>
@required
//指定每一列的滚轮上的Cell的个数
- (NSUInteger)numberOfCellsInScroll:(NSUInteger)scroll;
//指定每一列滚轮所占整体宽度的比例,以:分隔
- (NSString *)scrollWidthProportion;
//指定每一列的滚轮上的Cell的初始值,以:分隔
- (NSString *)valueOfCellsInScroll;
@end
@protocol CyclePickerViewDelegate<NSObject>
@optional
//当滚轮的值改变时调用此方法,数组中为选中值的字符串类型
- (void)CyclePickerViewDidChangeValue:(NSArray *) valuearr;
@end
@@ -0,0 +1,202 @@
//
// CyclePickerView.m
// RBCustomDateTimePicker
//
// Created by 高琦 on 15/1/22.
// Copyright (c) 2015年 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 "CyclePickerView.h"
@interface CyclePickerView(){
UIView *timeBroadcastView;//定时播放显示视图
}
@end
@implementation CyclePickerView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
[self CreatePickerView];
}
return self;
}
- (void)CreatePickerView{
CGRect rect = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
timeBroadcastView = [[UIView alloc] initWithFrame:rect];
NSInteger rowheight = timeBroadcastView.frame.size.height/5;
NSInteger width = timeBroadcastView.frame.size.width;
timeBroadcastView.layer.masksToBounds = YES;
[self addSubview:timeBroadcastView];
[timeBroadcastView release];
UIView *beforeSepLine = [[UIView alloc] initWithFrame:CGRectMake(0, rowheight, timeBroadcastView.frame.size.width, 1.0)];
[beforeSepLine setBackgroundColor:RGBA(237.0, 237.0, 237.0, 1.0)];
[timeBroadcastView addSubview:beforeSepLine];
[beforeSepLine release];
UIView *middleSepLine = [[UIView alloc] initWithFrame:CGRectMake(0, rowheight*2+1, timeBroadcastView.frame.size.width, 0.5)];
[middleSepLine setBackgroundColor:[UIColor blackColor]];
[timeBroadcastView addSubview:middleSepLine];
[middleSepLine release];
UIImage* image1= [UIImage imageNamed:@"timeset1.png"];
image1 = [image1 stretchableImageWithLeftCapWidth:image1.size.width*0.5 topCapHeight:image1.size.height*0.5];
UIImageView * imageview1 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 12, timeBroadcastView.frame.size.width/30, rowheight*5-7)];
imageview1.image=image1;
[timeBroadcastView addSubview:imageview1];
[imageview1 release];
UIImage* image2= [UIImage imageNamed:@"timeset2.png"];
image2 = [image2 stretchableImageWithLeftCapWidth:image2.size.width*0.5 topCapHeight:image2.size.height*0.5];
UIImageView * imageview2 = [[UIImageView alloc] initWithFrame:CGRectMake(width-timeBroadcastView.frame.size.width/30, 0, timeBroadcastView.frame.size.width/30, rowheight*5)];
imageview2.image=image2;
[timeBroadcastView addSubview:imageview2];
[imageview2 release];
UIView * middlesecSepLine =[[UIView alloc] initWithFrame:CGRectMake(0, rowheight*3+1, timeBroadcastView.frame.size.width, 0.5)];
[middlesecSepLine setBackgroundColor:[UIColor blackColor]];
[timeBroadcastView addSubview:middlesecSepLine];
[middlesecSepLine release];
UIView *bottomSepLine = [[UIView alloc] initWithFrame:CGRectMake(0, rowheight*4+1, timeBroadcastView.frame.size.width, 1.5)];
[bottomSepLine setBackgroundColor:RGBA(237.0, 237.0, 237.0, 1.0)];
[timeBroadcastView addSubview:bottomSepLine];
[bottomSepLine release];
}
- (void)reloadScroll{
self.valueOfCellsInScroll = [[self.datasource valueOfCellsInScroll] componentsSeparatedByString:@":"];;
[self createscrollview];
}
- (void)createscrollview{
NSArray *array=[[self.datasource scrollWidthProportion] componentsSeparatedByString:@":"];
CGFloat total=0.0;
for (NSInteger i=0; i<array.count; i++) {
total+=[[array objectAtIndex:i]floatValue];
}
self.scrollWidthProportion=[NSMutableArray arrayWithCapacity:array.count];
for (NSInteger i=0; i<array.count; i++) {
[_scrollWidthProportion addObject:[NSString stringWithFormat:@"%f", [[array objectAtIndex:i]floatValue]/total]];
}
//设置每个滚轮的个数
self.numberOfCellsInScroll = [NSMutableArray arrayWithCapacity:array.count];
self.scrollviews = [NSMutableArray arrayWithCapacity:array.count];
for (NSInteger i = 0; i<array.count; i++) {
NSInteger numberOfCells=[self.datasource numberOfCellsInScroll:i];
[self.numberOfCellsInScroll addObject:[NSString stringWithFormat:@"%ld", (long)numberOfCells]];
}
CGFloat noworigin = 0.0;
for (NSInteger i = 0; i<array.count; i++) {
MXSCycleScrollView * cyclescrollView = [[MXSCycleScrollView alloc] initWithFrame:CGRectMake(noworigin*self.frame.size.width, 0, [_scrollWidthProportion[i] floatValue]*self.frame.size.width, self.frame.size.height)];
//NSLog(@">>>>>>>>>%@",NSStringFromCGRect(cyclescrollView.frame));
cyclescrollView.delegate = self;
cyclescrollView.datasource = self;
cyclescrollView.tag = i+100;
[self.scrollviews addObject:cyclescrollView];
//[self setAfterScrollShowView:cyclescrollView andCurrentPage:1];
[timeBroadcastView addSubview:cyclescrollView];
noworigin+=[_scrollWidthProportion[i] floatValue];
}
for (MXSCycleScrollView * scrollv in self.scrollviews) {
[scrollv reloadData];
[self setAfterScrollShowView:scrollv andCurrentPage:1];
}
}
- (void)setAfterScrollShowView:(MXSCycleScrollView*)scrollview andCurrentPage:(NSInteger)pageNumber
{
UILabel *oneLabel = [[(UILabel*)[[scrollview subviews] objectAtIndex:0] 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:0] 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:0] 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:0] 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:0] subviews] objectAtIndex:pageNumber+4];
[fourLabel setFont:[UIFont systemFontOfSize:14]];
[fourLabel setTextColor:RGBA(186.0, 186.0, 186.0, 1.0)];
}
#pragma mark mxccyclescrollview delegate
#pragma mark mxccyclescrollview databasesource
- (NSInteger)numberOfPages:(MXSCycleScrollView*)scrollView
{
for (MXSCycleScrollView * sc in self.scrollviews) {
if (scrollView.tag == sc.tag) {
return [_numberOfCellsInScroll[sc.tag-100] integerValue];
}
}
return 60;
}
- (UIView *)pageAtIndex:(NSInteger)index andScrollView:(MXSCycleScrollView *)scrollView
{
UILabel *l = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, scrollView.frame.size.width, scrollView.frame.size.height/5)];
l.tag = index+100;
static NSInteger cnt = 0;
for (MXSCycleScrollView * sc in self.scrollviews) {
if (scrollView.tag == sc.tag) {
cnt = sc.tag-100;
l.text = [NSString stringWithFormat:@"%d",(int)index+(int)[[self.valueOfCellsInScroll objectAtIndex:cnt] integerValue]];
}
}
l.font = [UIFont systemFontOfSize:12];
l.textAlignment = NSTextAlignmentCenter;
l.backgroundColor = [UIColor clearColor];
return l;
}
#pragma mark 当滚动时设置选中的cell
- (void)scrollviewDidChangeNumber
{
for (MXSCycleScrollView * scrollview in self.scrollviews) {
UILabel * label = [[(UILabel*)[[scrollview subviews] objectAtIndex:0] subviews] objectAtIndex:3];
label.textColor = RGBA(32.0, 94.0, 252.0, 1.0);
}
}
#pragma mark 滚动完成后的回调
- (void)scrollviewDidEndChangeNumber
{
NSMutableArray * scrollvalue = [NSMutableArray array];
for (MXSCycleScrollView * scrollview in self.scrollviews) {
UILabel * label = [[(UILabel*)[[scrollview subviews] objectAtIndex:0] subviews] objectAtIndex:3];
label.textColor = RGBA(32.0, 94.0, 252.0, 1.0);
[scrollvalue addObject:label.text];
}
if ([_delegate respondsToSelector:@selector(CyclePickerViewDidChangeValue:)]) {
[_delegate CyclePickerViewDidChangeValue:scrollvalue];
}
}
#pragma mark 设置默认选中的Cell
- (void)selectCell:(NSUInteger)cell inScroll:(NSUInteger)scroll{
MXSCycleScrollView * scrollview = [self.scrollviews objectAtIndex:scroll];
[scrollview setCurrentSelectPage:cell];
[scrollview reloadData];
[self setAfterScrollShowView:scrollview andCurrentPage:1];
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/
@end
@@ -0,0 +1,51 @@
//
// MXSCycleScrollView.h
// xuexin
// e-mail:rbyyy924805@163.com
// Created by renbing on 3/7/14.
// Copyright (c) 2014 renbing. All rights reserved.
//
#import <UIKit/UIKit.h>
@protocol MXSCycleScrollViewDelegate;
@protocol MXSCycleScrollViewDatasource;
@interface MXSCycleScrollView : UIView<UIScrollViewDelegate>
{
UIScrollView *_scrollView;
NSInteger _totalPages;
NSInteger _curPage;
NSMutableArray *_curViews;
}
@property (nonatomic,readonly) UIScrollView *scrollView;
@property (nonatomic,assign) NSInteger currentPage;
@property (nonatomic,assign)BOOL isthreelabel;
@property (nonatomic,assign,setter = setDataource:) id<MXSCycleScrollViewDatasource> datasource;
@property (nonatomic,assign,setter = setDelegate:) id<MXSCycleScrollViewDelegate> delegate;
- (void)setCurrentSelectPage:(NSInteger)selectPage; //设置初始化页数
- (void)reloadData;
- (void)setViewContent:(UIView *)view atIndex:(NSInteger)index;
@end
@protocol MXSCycleScrollViewDelegate <NSObject>
@optional
- (void)didClickPage:(MXSCycleScrollView *)csView atIndex:(NSInteger)index;
- (void)scrollviewDidChangeNumber;
- (void)scrollviewDidEndChangeNumber;
@end
@protocol MXSCycleScrollViewDatasource <NSObject>
@required
- (NSInteger)numberOfPages:(MXSCycleScrollView*)scrollView;
- (UIView *)pageAtIndex:(NSInteger)index andScrollView:(MXSCycleScrollView*)scrollView;
@end
@@ -0,0 +1,225 @@
//
// 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
@@ -0,0 +1,48 @@
//
// MXSCycleScrollView3.h
// 2cu
//
// Created by 高琦 on 15/2/9.
// Copyright (c) 2015年 guojunyi. All rights reserved.
//
#import <UIKit/UIKit.h>
@protocol MXSCycleScrollView3Delegate;
@protocol MXSCycleScrollView3Datasource;
@interface MXSCycleScrollView3 : UIView<UIScrollViewDelegate>
{
UIScrollView *_scrollView;
NSInteger _totalPages;
NSInteger _curPage;
NSMutableArray *_curViews;
}
@property (nonatomic,readonly) UIScrollView *scrollView;
@property (nonatomic,assign) NSInteger currentPage;
@property (nonatomic,assign)BOOL isthreelabel;
@property (nonatomic,assign,setter = setDataource:) id<MXSCycleScrollView3Datasource> datasource;
@property (nonatomic,assign,setter = setDelegate:) id<MXSCycleScrollView3Delegate> delegate;
- (void)setCurrentSelectPage:(NSInteger)selectPage; //设置初始化页数
- (void)reloadData;
- (void)setViewContent:(UIView *)view atIndex:(NSInteger)index;
@end
@protocol MXSCycleScrollView3Delegate <NSObject>
@optional
- (void)didClickPage:(MXSCycleScrollView3 *)csView atIndex:(NSInteger)index;
- (void)scrollviewDidChangeNumber;
- (void)scrollviewDidEndChangeNumber;
@end
@protocol MXSCycleScrollView3Datasource <NSObject>
@required
- (NSInteger)numberOfPages:(MXSCycleScrollView3 *)scrollView;
- (UIView *)pageAtIndex:(NSInteger)index andScrollView:(MXSCycleScrollView3 *)scrollView;
@end
@@ -0,0 +1,212 @@
//
// 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