3个UIimageView实现图片的循环切换

来源:互联网 发布:小米电视有线网络设置 编辑:程序博客网 时间:2024/05/21 18:32

#import "ViewController.h"

#define KWidth self.view.frame.size.width

#define KHeight self.view.frame.size.height



@interface ViewController ()<UIScrollViewDelegate>


@property(nonatomic,weak)UIScrollView *scroll;

/**存放图片名的数组*/

@property(nonatomic,strong)NSMutableArray *imageNameArray;

/**存放3UIimageView的数组*/

@property(nonatomic,strong)NSMutableArray *imageViewArray;

/**存放3UIimageView中未被利用的UIimageView的数组*/

@property(nonatomic,strong)NSMutableArray *imageUnusedViewArray;


@end


@implementation ViewController


//懒加载(用到时才加载)

-(NSMutableArray *)imageNameArray{

    if (_imageNameArray==nil)

    {

       _imageNameArray = [NSMutableArrayarray];

    }

    return_imageNameArray;

}


-(NSMutableArray *)imageViewArray{

    if (_imageViewArray==nil)

    {

       _imageViewArray = [NSMutableArrayarray];

    }

    return_imageViewArray;

}


-(NSMutableArray *)imageUnusedViewArray{

    if (_imageUnusedViewArray==nil)

    {

        _imageUnusedViewArray = [NSMutableArrayarray];

    }

    return_imageUnusedViewArray;


}




- (void)viewDidLoad {

    [superviewDidLoad];


    

    //加载数据

    [self_loadData];

    

    //加载视图

    [self_loadView];


    

}


#pragma mark - 加载数据

-(void)_loadData{



   for (int i=1; i<12; i++)

    {

       NSString *imageName = [NSStringstringWithFormat:@"t%i.jpg",i];

        [self.imageNameArrayaddObject:imageName];

        

    }


}


#pragma  mark - 加载视图

-(void)_loadView{


    UIScrollView *scroll = [[UIScrollViewalloc] initWithFrame:self.view.bounds];

    [self.viewaddSubview:scroll];

    scroll.contentSize =CGSizeMake(KWidth*self.imageNameArray.count,0);

    scroll.pagingEnabled =YES;

    scroll.delegate =self;

   self.scroll = scroll;

    

    //添加三个视图

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

    {

       UIImageView *imageView = [[UIImageViewalloc] initWithFrame:CGRectMake(i*KWidth,0, KWidth, KHeight)];

        

        imageView.image = [UIImageimageNamed:self.imageNameArray[i]];

        

        [self.scrolladdSubview:imageView];

        [self.imageViewArrayaddObject:imageView];



    }

}


-(void)scrollViewDidScroll:(UIScrollView *)scrollView{


    //只有contentOffset是整数时才进行下面判断,这样做就相当于-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView方法

   if (scrollView.contentOffset.x/KWidth==(int)(scrollView.contentOffset.x/KWidth))

    {

        //获取未利用的imageView

        [selfgetUnusedView];

        

        //不是在第一页,也不是在最后一页的时候

       if (scrollView.contentOffset.x>0&&scrollView.contentOffset.x<KWidth*(self.imageNameArray.count-1))

        {

            [selfsetImageFrameWithImage:self.imageUnusedViewArray[0]andImageWith:frontView];

            

            [selfsetImageFrameWithImage:self.imageUnusedViewArray[1]andImageWith:nextView];

            

            //如果当没利用的imageView数量大于3时,证明当前页面也没有利用,所以当前页面就没有图片(当滑的太快时就会出现以上情况)

            if (self.imageUnusedViewArray.count>2)

            {

                [selfsetImageFrameWithImage:self.imageUnusedViewArray[2]andImageWith:defineView];

            }

            

            

        }

        //如果实在第一页

       else if(scrollView.contentOffset.x==0)

        {

            [selfsetImageFrameWithImage:self.imageViewArray[0]andImageWith:defineView];

            [selfsetImageFrameWithImage:self.imageViewArray[1]andImageWith:nextView];

        }

        //如果是在最后一页

       else

        {

            [selfsetImageFrameWithImage:self.imageViewArray[0]andImageWith:defineView];

            

            [selfsetImageFrameWithImage:self.imageViewArray[1]andImageWith:frontView];

            

        }

    }

    //如果contentOffset不是整数就返回

   else

    {

    

       return;

    

    }




}



#pragma mark - 设置frame和图片

-(void)setImageFrameWithImage:(UIImageView *)imageView andImageWith:(NSInteger)flag{


    //设置frame

   CGFloat space = flag*KWidth;

    CGFloat X = self.scroll.contentOffset.x+space;

    imageView.frame =CGRectMake(X, 0,KWidth, KHeight);

    

    

    //设置图片

   NSInteger imageIndex = X/KWidth;

    imageView.image =  [UIImageimageNamed:self.imageNameArray[imageIndex]];



}


#pragma mark - 获得未被利用的imageView

-(void)getUnusedView{


   for (int i=0; i<self.imageViewArray.count; i++)

    {

       UIImageView *imageV = self.imageViewArray[i];


        if (imageV.frame.origin.x!=self.scroll.contentOffset.x)

        {

            [self.imageUnusedViewArrayaddObject:imageV];

        }

    }


}


@end


0 0
原创粉丝点击