Initial commit
This commit is contained in:
+42
@@ -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
|
||||
+202
@@ -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
|
||||
+51
@@ -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
|
||||
+225
@@ -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
|
||||
+48
@@ -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
|
||||
+212
@@ -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
|
||||
Reference in New Issue
Block a user