今天学会了一个简单的重用案例:
具体代码如下:
@interface ReuseView : UIView <UIScrollViewDelegate>
{
UIScrollView* _scrollView;
}
@property(nonatomic,retain)NSMutableArray* imageArr;
@property(nonatomic,retain)NSMutableArray* currentArr;
@end
@interface ReuseView ()
/**
* 输入图片数量来加载到图片数组内(只存图片名)
*
* @param num num description
*
* @return return value description
*/
-(NSMutableArray*)imageNamesNum:(int)num;
/**
* 根据下一张显示的图片来更新缓存的array
*
* @param locationAtImageArr locationAtImageArr
*/
-(void)repaceImageName:(int)locationAtImageArr;
/**
* 替换显示视图,(全部更新)
*
* @param scrollView scrollView description
*/
-(void)replaceView:(UIScrollView*)scrollView;
@end
@implementation ReuseView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
_scrollView = [[UIScrollView alloc]initWithFrame:frame];
_scrollView.contentSize=CGSizeMake(frame.size.width*3, frame.size.height);
_scrollView.backgroundColor =[UIColor orangeColor];
_scrollView.directionalLockEnabled = YES;
_scrollView.pagingEnabled = YES;
_scrollView.showsVerticalScrollIndicator = NO;
self.imageArr = [NSMutableArray arrayWithArray:[self imageNamesNum:6]];//图片数量设为默认了,可以修改
self.currentArr = [NSMutableArray arrayWithCapacity:3];
for (int i = 0 ;i< 3;i++) {
[self.currentArr addObject:[self.imageArr objectAtIndex:i]];
}
[self addSubViews];
_scrollView.delegate = self;
[self addSubview:_scrollView];
}
return self;
}
-(void)addSubViews{
for (int i = 0 ;i< 3;i++) {
UIImage* image = [[UIImage alloc]initWithContentsOfFile:[self.imageArr objectAtIndex:i]];
UIImageView* imageView = [[UIImageView alloc]initWithImage:image];
imageView.frame = CGRectMake(self.frame.size.width*i, 0, self.frame.size.width, self.frame.size.height);
imageView.tag = 100+i;
[_scrollView addSubview:imageView];
_scrollView.contentOffset = CGPointMake(self.frame.size.width, 0);
[image release];
[imageView release];
}
}
-(NSMutableArray*)imageNamesNum:(int)num{
NSMutableArray* arr = [NSMutableArray arrayWithCapacity:num];
for (int i=0; i<num; i++) {
NSString* filePath =[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%d",i+1] ofType:@"jpg"];
[arr addObject:filePath];
}
return arr ;
}
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
CGPoint offset = scrollView.contentOffset;
int moveImage = (offset.x - self.frame.size.width)/ self.frame.size.width;
scrollView.contentOffset = CGPointMake(self.frame.size.width, 0);//不论如何移动定位到中间的视图
if (moveImage) {
int locationAtImageArr = [self.imageArr indexOfObject:[self.currentArr objectAtIndex:moveImage+1]];//计算将要显示的图片的位置
[self repaceImageName:locationAtImageArr];
[self replaceView:scrollView];
}
}
-(void)replaceView:(UIScrollView*)scrollView{
/**
* 根据缓存数组内容来刷新视图
*/
for (int i =0 ; i<3; i++) {
UIImageView* currentImageView =(UIImageView*)[scrollView viewWithTag:(100+i)];
UIImage* currentImage = [UIImage imageWithContentsOfFile:[self.currentArr objectAtIndex:i]];
currentImageView.image =currentImage;
}
}
-(void)repaceImageName:(int)locationAtImageArr{
//给缓存的数组第一个元素赋值
[self.currentArr replaceObjectAtIndex:0 withObject:[self.imageArr objectAtIndex:((locationAtImageArr-1)<0?([self.imageArr count]-1):locationAtImageArr-1)]];
//给缓存的数组第二个元素赋值
[self.currentArr replaceObjectAtIndex:1 withObject:[self.imageArr objectAtIndex:locationAtImageArr]];
//给缓存的数组第三个元素赋值
[self.currentArr replaceObjectAtIndex:2 withObject:[self.imageArr objectAtIndex:(locationAtImageArr+1>([self.imageArr count]-1)?0:locationAtImageArr+1)]];
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/
@end