加载路径来滑动大量图片的uiscrollview

//已封装

//根视图控制器里初始化

- (void)viewDidLoad

{

    [super viewDidLoad];

    NSMutableArray* arr=[[NSMutableArray alloc]init];

    for (int i=0; i<11; i++) {

        NSString* path=[[NSBundle mainBundle]pathForResource:[NSString stringWithFormat:@"%d",i+101] ofType:@"png"];

        [arr addObject:path];

    }

    ScrollView *scroll=[[ScrollView alloc]initWithFrame:CGRectMake(20, 20, 280, 420) imagenames:arr];

    [self.view addSubview:scroll];

    [scroll release];

// Do any additional setup after loading the view.

}



//声明

#import <UIKit/UIKit.h>


@interface ScrollView : UIView<UIScrollViewDelegate>

{

    UIScrollView *scroll;

}


@end


//实现部分

#import "Scroll.h"

@interface ScrollView ()

{

    UIScrollView *scroll;

}

@property(nonatomic,retain)NSMutableArray *arr;

@property(nonatomic,retain)NSMutableArray *imagenames;

@end


@implementation ScrollView

int indexnum;//当前图片下标

CGFloat width;

CGFloat height;

- (id)initWithFrame:(CGRect)frame imagenames:(NSMutableArray*)imagename

{

    self = [super initWithFrame:frame];

    self.imagenames=[NSMutableArray arrayWithArray:imagename];//赋值用self.不能用_

    width=self.frame.size.width;

    height=self.frame.size.height-40;

    indexnum=1;

    if (self) {

        //设置滑动视图属性

        scroll=[[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, width, height)];

        scroll.backgroundColor=[UIColor blueColor];

        [self addSubview:scroll];

        scroll.pagingEnabled=YES;

        scroll.scrollsToTop=YES;

        scroll.showsVerticalScrollIndicator=NO;

        scroll.showsHorizontalScrollIndicator=NO;

        scroll.delegate=self;

        scroll.contentSize=CGSizeMake(width*3, height);


        //循环加载图片

        _arr=[[NSMutableArray alloc]init];

        for (int i=0; i<3; i++) {

            UIImageView *view=[[UIImageView alloc]initWithImage:[UIImage imageWithData:[NSData dataWithContentsOfFile:[_imagenames objectAtIndex:i]]]];

            [_arr addObject:view];

            view.frame=CGRectMake(i*width, 0, width, height);

            [scroll addSubview:view];

            [view release];

        }

      scroll.contentOffset=CGPointMake(width, 0);

      [scroll release];

        //定时器循环

//        [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(p:) userInfo:nil repeats:YES];

        // Initialization code

    }

    return self;

}


-(void)p:(NSTimer*)time//nstimer自动循环的方法

{

    int k=scroll.contentOffset.x;

    k+=width;

    scroll.contentOffset=CGPointMake(k, 0);

    

    //  if用来判断用户是向左滑动还是向右滑动

    if((scroll.contentOffset.x / width) == 0) {

        //  向左划动时,当前显示的图片下标自减,并判断是否越界

        indexnum--;

        if(indexnum < 0) {

            indexnum = _imagenames.count - 1;//最后一张图片

        }

    }else if((scroll.contentOffset.x / width) == 2) {

        //  向右划动时,当前显示的图片下标自增,并判断是否越界

        indexnum++;

        if(indexnum > _imagenames.count - 1) {

            indexnum = 0;//第一张图片

        }

    }

    //  刷新中间的图片

    [self refreshMiddleImage];

    //  将视图移至中间

    scroll.contentOffset=CGPointMake(width, 0);

    //  刷新另外两个图片

    [self refreshOtherImage];


}

//代理的两个方法


- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{


    

}// any offset changes//已经结束滑动时调用


- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

{

    //  if用来判断用户是向左滑动还是向右滑动

        if((scrollView.contentOffset.x / width) == 0) {

            //  向左划动时,当前显示的图片下标自减,并判断是否越界

            indexnum--;

            if(indexnum < 0) {

                indexnum = _imagenames.count - 1;

            }

        }else if((scrollView.contentOffset.x / width) == 2) {

            //  向右划动时,当前显示的图片下标自增,并判断是否越界

            indexnum++;

            if(indexnum > ([_imagenames count] - 1)) {

                indexnum = 0;

            }

        }

    //  刷新中间的图片

    [self refreshMiddleImage];

    //  将视图移至中间

    scrollView.contentOffset=CGPointMake(width, 0);

    //  刷新另外两个图片

    [self refreshOtherImage];

    

}// called when scroll view grinds to a halt//已经停止减速时调用

//  刷新另外两个图片

- (void)refreshOtherImage {

    //  刷新左边的图片

    [(UIImageView*)[_arr objectAtIndex:0] setImage:[UIImage imageWithData:[NSData dataWithContentsOfFile:[_imagenames objectAtIndex:indexnum==0?(_imagenames.count-1):(indexnum-1)]]]];

    //  刷新右边的图片

    [(UIImageView*)[_arr objectAtIndex:2] setImage:[UIImage imageWithData:[NSData dataWithContentsOfFile:[_imagenames objectAtIndex:indexnum==(_imagenames.count-1)?0:(indexnum+1)]]]];

}


//  刷新中间的图片

- (void)refreshMiddleImage {

    [(UIImageView*)[_arr objectAtIndex:1] setImage:[UIImage imageWithData:[NSData dataWithContentsOfFile:[_imagenames objectAtIndex:indexnum]]]];

}


 从代码优化的角度,使用 + (UIImage *)imageWithName:(NSString *)filePath 会占用系统的缓存空间,所以在加载图片的时候,推荐使用

+ (UIImage *)imageWithData : (NSData *)data 来加载图片.


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值