用的时候直接这样:
- (void)initScreenView
{
CGRect rect = CGRectMake(0,0, self.view.bounds.size.width,330);
if (!_screenView &&self.appInfo.screenarray.count>0){
_screenView = [[ScreenViewalloc] initWithFrame:rect];
}
[self.view addSubview:_screenView];
[_screenView refreshAppScreens:self.appInfo];
}
刷新数据时直接调用: [_screenView refreshAppScreens : self .appInfo ];
上代码吧:
#import <UIKit/UIKit.h>
#import "GNBaseDef.h"
@interface ScreenView : UIView<UIScrollViewDelegate>
{
NSMutableArray* _screenArray; //for screens
NSMutableArray* _itemsArray; //items array
UIScrollView* _scrollView; //scroll view
NSInteger _currIndex; //index
AppBaseInfo* _baseInfo; //app base info
NSInteger _curPage;
NSInteger _totalPage;
NSMutableArray *_currImages;
}
@property (nonatomic,retain) AppBaseInfo* baseInfo;
/*refresh screen*/
- (void)refreshAppScreens:(AppBaseInfo*)object;
@end
#import "ScreenView.h"
#import <QuartzCore/QuartzCore.h>
#import "UIImageView+WebCache.h"
@implementation ScreenView
@synthesize baseInfo = _baseInfo;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
//background color
self.backgroundColor = [UIColor colorWithRed:240.0f/255 green:240.0f/255 blue:240.0f/255 alpha:1.0f];
//scroll view
_curPage = 1;
_currImages = [[NSMutableArray alloc] initWithCapacity:3];
_scrollView = [[UIScrollView alloc] initWithFrame:self.bounds];
_scrollView.backgroundColor = [UIColor clearColor];
_scrollView.contentSize = self.bounds.size;
_scrollView.showsVerticalScrollIndicator = NO;
_scrollView.showsHorizontalScrollIndicator = NO;
_scrollView.delegate = self;
_scrollView.pagingEnabled = YES;
[self addSubview:_scrollView];
}
return self;
}
- (void)dealloc
{
SAFE_RELEASE(_baseInfo);
SAFE_RELEASE(_scrollView);
SAFE_RELEASE(_itemsArray);
SAFE_RELEASE(_screenArray);
SAFE_RELEASE(_currImages);
[super dealloc];
}
#pragma mark --
#pragma mark Methords
/*refresh screen*/
- (void)refreshAppScreens:(AppBaseInfo*)object
{
if (!object) return;
self.baseInfo = object;
_totalPage = self.baseInfo.screenarray.count;
_scrollView.contentSize = CGSizeMake(320*3,self.bounds.size.height);
if (!_screenArray){
_screenArray = [[NSMutableArray alloc] initWithCapacity:3];
}
[_screenArray removeAllObjects];
[_screenArray addObjectsFromArray:self.baseInfo.screenarray];
[self refreshScrollViewData];
}
- (void)refreshScrollViewData {
NSArray *subViews = [_scrollView subviews];
if([subViews count] != 0) {
[subViews makeObjectsPerformSelector:@selector(removeFromSuperview)];
}
[self getShowImagesWithCurpage:_curPage];
for (int i = 0; i < 3; i++) {
UIImageView *imageView = [[UIImageView alloc] initWithFrame:_scrollView.frame];
[imageView setImageWithURL:[NSURL URLWithString:_currImages[i]]];
imageView.frame = CGRectOffset(_scrollView.frame, _scrollView.frame.size.width * i,0);
[_scrollView addSubview:imageView];
}
[_scrollView setContentOffset:CGPointMake(_scrollView.frame.size.width,0)];
}
- (NSArray *)getShowImagesWithCurpage:(int)page {
int prePage = [self validPageValue:_curPage-1];
int lastPage = [self validPageValue:_curPage+1];
if([_currImages count] != 0) [_currImages removeAllObjects];
[_currImages addObject:[_screenArray objectAtIndex:prePage-1]];
[_currImages addObject:[_screenArray objectAtIndex:_curPage-1]];;
[_currImages addObject:[_screenArray objectAtIndex:lastPage-1]];
return _currImages;
}
- (int)validPageValue:(NSInteger)value
{
if(value == 0) value = _totalPage;
if(value == _totalPage + 1)
value = 1;
return value;
}
#pragma mark --
#pragma mark UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
int x = aScrollView.contentOffset.x;
if(x >= (2*_scrollView.frame.size.width)) {
_curPage = [self validPageValue:_curPage+1];
[self refreshScrollViewData];
}
if(x <= 0) {
_curPage = [self validPageValue:_curPage-1];
[self refreshScrollViewData];
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)aScrollView
{
[_scrollView setContentOffset:CGPointMake(_scrollView.frame.size.width,0) animated:YES];
}
@end