#import

typedefenum_CycleDirection

{ PortaitDirection,LandscapeDirection } CycleDirection;

@interfaceCycleScrollView : UIView<UIScrollViewDelegate> {

UIScrollView*scrollView;

UIImageView*curImageView;

inttotalPage;  

intcurPage;

CGRectscrollFrame;

CycleDirectionscrollDirection; // scrollView滚动的方向

NSArray*p_w_picpathsArray;  // 存放所有需要滚动的图片

NSMutableArray*curImages; //存放当前滚动的三张图片

}

- (int) validPageValue:(NSInteger)value;

- (id) initWithFrame:(CGRect)frame cycleDirection:(CycleDirection)direction pictures:(NSArray*)pictureArray;

- (NSArray*) getDisplayImagesWithCurpage:(int)page;

- (void) refreshScrollView;

@end


//

// CycleScrollView.m

// CycleScrollView

//

// Created by mini5 on 28/07/2011.

// Copyright 2011 __MyCompanyName__. All rights reserved.

//

#import "CycleScrollView.h"

@implementationCycleScrollView

- (id) initWithFrame:(CGRect)frame cycleDirection:(CycleDirection)direction pictures:(NSArray*)pictureArray

{

self=[superinitWithFrame:frame];

if(self)

{

scrollFrame=frame;

scrollDirection=direction;

totalPage=[pictureArray count];

curPage=1; //当前显示的是图片数组里的第一张图片

curImages=[[NSMutableArrayalloc] init];

p_w_picpathsArray=[[NSArrayalloc] initWithArray:pictureArray];

scrollView=[[UIScrollViewalloc] initWithFrame:frame];

scrollView.backgroundColor=[UIColorblueColor];

scrollView.showsHorizontalScrollIndicator=NO;

scrollView.showsVerticalScrollIndicator=NO;

scrollView.pagingEnabled=YES;

scrollView.delegate=self;

[selfaddSubview:scrollView];

if(scrollDirection==PortaitDirection)  //在竖直方向滚动

{

scrollView.contentSize=CGSizeMake(scrollView.frame.size.width,scrollView.frame.size.height*3);  //竖直方法可以存放三张图片

}

if(scrollDirection==LandscapeDirection) //在水平方向滚动

{

scrollView.contentSize=CGSizeMake(scrollView.frame.size.width*3,scrollView.frame.size.height);

}

[selfaddSubview:scrollView];

[selfrefreshScrollView];

}

returnself;

}

- (void) refreshScrollView

{

NSArray*subViews=[scrollViewsubviews];

if([subViews count]!=0)

{

[subViews makeObjectsPerformSelector:@selector(removeFromSuperview)];

}

[selfgetDisplayImagesWithCurpage:curPage];

UIImage*preImage=[curImagesobjectAtIndex:0];

UIImage*curImage=[curImagesobjectAtIndex:1];

UIImage*lastImage=[curImagesobjectAtIndex:2];

UIImageView*preView=[[UIImageViewalloc] initWithImage:preImage];

UIImageView*curView=[[UIImageViewalloc] initWithImage:curImage];

UIImageView*lastView=[[UIImageViewalloc] initWithImage:lastImage];

[scrollViewaddSubview:preView];

[scrollViewaddSubview:curView];

[scrollViewaddSubview:lastView];

[preView release];

[curView release];

[lastView release];

if(scrollDirection==PortaitDirection)  //竖直滚动

{

preView.frame=CGRectOffset(preView.frame, 0, 0);

curView.frame=CGRectOffset(curView.frame, 0, scrollFrame.size.height);

lastView.frame=CGRectOffset(lastView.frame, 0, 2*scrollFrame.size.height);

[scrollViewsetContentOffset:CGPointMake(0, scrollFrame.size.height)];

}

if(scrollDirection==LandscapeDirection) //水平滚动

{

preView.frame=CGRectOffset(preView.frame, 0, 0);

curView.frame=CGRectOffset(curView.frame, scrollFrame.size.width, 0);

lastView.frame=CGRectOffset(lastView.frame, scrollFrame.size.width*2, 0);

[scrollViewsetContentOffset:CGPointMake(scrollFrame.size.width, 0)];

}

}

- (NSArray*) getDisplayImagesWithCurpage:(int)page

{

intpre=[selfvalidPageValue:curPage-1];

intlast=[selfvalidPageValue:curPage+1];

if([curImagescount]!=0) [curImagesremoveAllObjects];

[curImagesaddObject:[p_w_picpathsArrayobjectAtIndex:pre-1]];

[curImagesaddObject:[p_w_picpathsArrayobjectAtIndex:curPage-1]];

[curImagesaddObject:[p_w_picpathsArrayobjectAtIndex:last-1]];

returncurImages;

}

- (int)validPageValue:(NSInteger)value

{

if(value==0) value=totalPage; //value1为第一张,value=0为前面一张

if(value==totalPage+1) value=1;

returnvalue;

}

- (void) scrollViewDidScroll:(UIScrollView*)crollView

{

intx=crollView.contentOffset.x;

inty=crollView.contentOffset.y;

if(scrollDirection==LandscapeDirection) //水平滚动

{

if(x>=2*scrollFrame.size.width) //往下翻一张

{

curPage=[selfvalidPageValue:curPage+1];

[selfrefreshScrollView];

}

if(x<=0)

{

curPage=[selfvalidPageValue:curPage-1];

[selfrefreshScrollView];

}

}

//竖直滚动

if(scrollDirection==PortaitDirection)

{

if(y==2*scrollFrame.size.height)

{

curPage=[selfvalidPageValue:curPage+1];

[selfrefreshScrollView];

}

}

}

- (void)dealloc

{

[p_w_picpathsArrayrelease];

[curImagesrelease];

[superdealloc];

}

@end

转载自http://blog.sina.com.cn/s/blog_93f39bc20100vgsd.html