ScrollView循環(huán)利用

//
//  ViewController.m
//  ScrollView循環(huán)利用
//
//  Created by 高新強(qiáng) on 15/11/19.
//  Copyright ? 2015年 Gavin. All rights reserved.
//

#import "ViewController.h"

#define kCount 8
@interface ViewController ()<UIScrollViewDelegate>
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;

@property (weak, nonatomic) UIImageView *centerImageV;
@property (weak, nonatomic) UIImageView *reuseImageV;



@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor redColor];
    
    //圖片的寬度
    CGFloat w = self.view.frame.size.width;
    //圖片的高度
    CGFloat h = self.view.frame.size.height;
    
    //設(shè)置ScrollView初始化屬性
    //設(shè)置分頁(yè)效果
    self.scrollView.pagingEnabled = YES;
    //初始化ScollView的內(nèi)容大小
    self.scrollView.contentSize = CGSizeMake(3 * w, h);
    //隱藏垂直滾動(dòng)條
    self.scrollView.showsVerticalScrollIndicator = NO;
    //設(shè)置ScrollView代理
    self.scrollView.delegate = self;
    
    //創(chuàng)建一個(gè)可見的UIImageView(也就是中間的UIImageView)
    UIImageView *centerImageV = [[UIImageView alloc] init];
    //記錄住中間的centerImageV.
    self.centerImageV = centerImageV;
    //設(shè)置一張默認(rèn)圖片
    self.centerImageV.image = [UIImage imageNamed:@"00"];
    //設(shè)置中間圖片的x值為一個(gè)屏幕的寬度
    self.centerImageV.frame = CGRectMake(w, 0, w, h);
    //給圖片綁定一個(gè)標(biāo)識(shí).
    self.centerImageV.tag = 0;
    //把圖片添加到ScrollView上.
    [self.scrollView addSubview:self.centerImageV];
    
    
    
    //創(chuàng)建一個(gè)可重復(fù)利用的UIImageView,也就是一下滾動(dòng)出來(lái)的圖片.
    UIImageView *reuseImageV = [[UIImageView alloc] init];
    //記錄住reuseImageV
    self.reuseImageV = reuseImageV;
    //把它的位置設(shè)置到最左側(cè).也就是0,0的位置,讓它的大小和當(dāng)前ScrollView的大小一樣.
//    self.reuseImageV.image = [UIImage imageNamed:@"01"];
    self.reuseImageV.frame = self.view.bounds;
    
    //把圖片添加到ScrollView上.
    [self.scrollView addSubview:self.reuseImageV];
    
    
    //初始化scrollView的偏移量.一開始顯示中間部分.
    self.scrollView.contentOffset = CGPointMake(w, 0);

}

//當(dāng)ScorllView滾動(dòng)時(shí)調(diào)用.
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    
    //獲取ScrollView X軸方向的偏移量
    CGFloat offsetX = scrollView.contentOffset.x;
    //記錄ScollView的寬度.
    CGFloat w = scrollView.frame.size.width;
    
    //設(shè)置循環(huán)利用View的位置.
    CGRect reuserImageVFrame = self.reuseImageV.frame;
    //記錄當(dāng)前是第幾頁(yè)
    NSInteger index = 0;
    
    //判斷是向左滾動(dòng)還是向右滾動(dòng)
    if(offsetX > self.centerImageV.frame.origin.x){
        //如果是向右滾動(dòng)
        //讓重復(fù)利用的圖片X在中間ImageView的后面.
        reuserImageVFrame.origin.x = CGRectGetMaxX(self.centerImageV.frame);
        //設(shè)置頁(yè)數(shù)+1.
        index = self.centerImageV.tag + 1;
        if (index > kCount - 1) {
            //如果頁(yè)數(shù)大于總個(gè)數(shù).從第0頁(yè)開始.
            index = 0;
        }
        
    }else{
        //如果是向左滾動(dòng).
        //設(shè)置重復(fù)利用的圖片X在左側(cè),0的位置
        reuserImageVFrame.origin.x = 0;
        //設(shè)置頁(yè)數(shù)-1
        index = self.centerImageV.tag - 1;
        //如果頁(yè)數(shù)小于0頁(yè).
        if(index < 0){
            //從最后一頁(yè)開始.
            index = kCount - 1;
        }
    }
    
    //設(shè)置重復(fù)利用的圖片的位置
    self.reuseImageV.frame = reuserImageVFrame;
    //記錄當(dāng)前重復(fù)利用的圖片是第幾頁(yè)
    _reuseImageV.tag = index;
    NSLog(@"%ld",index);
    //設(shè)置圖片名稱
    NSString *imageName = [NSString stringWithFormat:@"0%ld",index];
    //設(shè)置重復(fù)利用的圖片
    self.reuseImageV.image = [UIImage imageNamed:imageName];
    
    //設(shè)置如果滾動(dòng)到最左側(cè),或者滾動(dòng)的最右側(cè).
    if(offsetX <= 0 || offsetX >= 2 * w){
        
        //交換中間的圖片 和 重復(fù)利用圖片兩個(gè)對(duì)象.
        UIImageView *temp = self.centerImageV;
        self.centerImageV = self.reuseImageV;
        self.reuseImageV = temp;
        
        //交換兩個(gè)圖片的位置.
        self.centerImageV.frame = self.reuseImageV.frame;
        //初始化scrollView的偏移量.一開始顯示中間部分.
        self.scrollView.contentOffset = CGPointMake(w, 0);
    }
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 先上Unity里面的組件的詳情 接著是代碼 Item 暫時(shí)就這樣,還沒實(shí)際應(yīng)用過,不過在demo里測(cè)了,感覺還行。
    煎蛋的少年閱讀 4,525評(píng)論 0 2
  • 用 scrollview 做,循環(huán)展示,1~10個(gè)可以比較簡(jiǎn)單,耗能比較少,假設(shè)100,1000,等等或者更多,總...
    LeeDev閱讀 3,365評(píng)論 5 9
  • 最近關(guān)注了一位手賬達(dá)人,被她的手賬深深吸引著,畫質(zhì)清晰,內(nèi)容生動(dòng),看得我也蠢蠢欲動(dòng),下定決心來(lái)使用手賬。 準(zhǔn)備工作...
    梁小翠閱讀 1,048評(píng)論 5 11
  • 我想換個(gè)手機(jī),等我有了錢。 我想買個(gè)電腦,等我有了錢。 我想去旅行下,等我有了錢。 我想做個(gè)網(wǎng)站,等我有了錢。 我...
    山楂葉閱讀 450評(píng)論 1 1
  • 友友們,可以將你的故事發(fā)送至三格格 ^_^這樣你就可以和一個(gè)不認(rèn)識(shí)的朋友互相交換故事啦。
    原味三格格閱讀 914評(píng)論 0 0

友情鏈接更多精彩內(nèi)容