自定義輪播視圖


#import "UIScrollView_leftAndRight.h"
#define kwidth self.frame.size.width  //自定義View的寬
#define kheight self.frame.size.height//自定義View的高

@interface UIScrollView_leftAndRight ()<UIScrollViewDelegate>//遵守協(xié)議
@property (nonatomic,strong)UIScrollView *scrollView;
//定義三個imageView屬性
@property (nonatomic,strong)UIImageView *leftImageView;
@property (nonatomic,strong)UIImageView *middleImageView;
@property (nonatomic,strong)UIImageView *rightImageView;
//定時器
@property (nonatomic,strong)NSTimer *timer;
//在初始化時用來接收方法調(diào)用時需要傳入的數(shù)組
@property (nonatomic,strong)NSArray *array;
@property (nonatomic,strong)UIPageControl *pageControl;
@end

創(chuàng)建UI

@implementation UIScrollView_leftAndRight

//重寫初始化方法病傳入存放圖片的數(shù)組,并聲明在.h文件中
- (instancetype)initWithFrame:(CGRect)frame   Array:(NSArray *)array{
    self = [super initWithFrame:frame];
    if (self) {
        self.array = array;
        //設(shè)置scrollView的偏移量在視圖出現(xiàn)的時候為一個屏寬
        self.scrollView.contentOffset = CGPointMake(kwidth, 0);
        //小圓點的個數(shù)
        self.pageControl.numberOfPages = array.count;
        [self createView];
    }
    return self;
}
-(void)createView{
    [self addSubview:self.scrollView];
    [self addSubview:self.pageControl];
    [self.scrollView addSubview:self.leftImageView];
    [self.scrollView addSubview:self.middleImageView];
    [self.scrollView addSubview:self.rightImageView];
    //延遲執(zhí)行timer方法,時間與timer重復(fù)執(zhí)行方法的時間相同
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        //開啟定時器
        self.timer.fireDate = [NSDate distantPast];
    });
}
//滾動視圖懶加載
-(UIScrollView *)scrollView{
    if (!_scrollView) {
        _scrollView = [[UIScrollView alloc]initWithFrame:self.frame];
        //三個圖片大小的寬度
        _scrollView.contentSize = CGSizeMake(kwidth*3, 0);
        //以下是設(shè)置一些基本屬性
        _scrollView.pagingEnabled = YES;
        _scrollView.bounces = NO;
        //設(shè)置代理
        _scrollView.delegate = self;
    }
    return _scrollView;
}
//三個ImageView的懶加載
-(UIImageView *)leftImageView{
    if (!_leftImageView) {
        _leftImageView = [[UIImageView alloc]initWithFrame:self.frame];
        _leftImageView.image = self.array[self.array.count-1];//數(shù)組中最后一張圖片
    }
    return _leftImageView;
}
-(UIImageView *)middleImageView{
    if (!_middleImageView) {
        _middleImageView = [[UIImageView alloc]initWithFrame:CGRectMake(kwidth, 0, kwidth, kheight)];
        _middleImageView.image = self.array[0];//數(shù)組中第一張圖片
    }
    return _middleImageView;
}

-(UIImageView *)rightImageView{
    if (!_rightImageView) {
        _rightImageView = [[UIImageView alloc]initWithFrame:CGRectMake(kwidth*2, 0, kwidth, kheight)];
        _rightImageView.image = self.array[1];
    }
    return _rightImageView;
}
//圓點指示器懶加載
-(UIPageControl *)pageControl{
    if (!_pageControl) {
        _pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(0, kheight-99, kwidth, 50)];
     }
    return _pageControl;
}

關(guān)鍵代碼


#pragma mark 實現(xiàn)協(xié)議方法
//視圖滑動時候的設(shè)置偏移量均為中間imageView及準備左右圖片
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    //右滑時設(shè)置
    if (scrollView.contentOffset.x == kwidth * 2) {
        scrollView.contentOffset = CGPointMake(kwidth,0);
        self.middleImageView.image = self.rightImageView.image;
        //數(shù)組臨界值判斷
        if ([self.array indexOfObject:self.middleImageView.image ] >= self.array.count-1) {
            self.rightImageView.image = self.array.firstObject;
            self.leftImageView.image = self.array[[self.array indexOfObject:self.middleImageView.image]-1];
        }else  if ([self.array indexOfObject:self.middleImageView.image ] <= 0){
            self.rightImageView.image = self.array[[self.array indexOfObject:self.middleImageView.image]+1 ];
            self.leftImageView.image = self.array.lastObject;
        }else{
            self.rightImageView.image = self.array[[self.array indexOfObject:self.middleImageView.image]+1 ];
            self.leftImageView.image = self.array[[self.array indexOfObject:self.middleImageView.image]-1];
        }
    }
    //左滑時設(shè)置
    if (scrollView.contentOffset.x == 0) {
        scrollView.contentOffset = CGPointMake(kwidth, 0);
        self.middleImageView.image = self.leftImageView.image;
        //數(shù)組臨界值判斷
        if ([self.array indexOfObject:self.middleImageView.image] <= 0) {
            self.leftImageView.image = self.array.lastObject;
            self.rightImageView.image = self.array[[self.array indexOfObject:self.middleImageView.image]+1 ];
        }else  if ([self.array indexOfObject:self.middleImageView.image ] >= self.array.count-1){
            self.leftImageView.image = self.array[[self.array indexOfObject:self.middleImageView.image]-1];
            self.rightImageView.image = self.array.firstObject;
        }else{
            self.leftImageView.image = self.array[[self.array indexOfObject:self.middleImageView.image]-1];
            self.rightImageView.image = self.array[[self.array indexOfObject:self.middleImageView.image]+1 ];
        }
    }
    //指示器與顯示圖片同步
    self.pageControl.currentPage = [self.array indexOfObject:self.middleImageView.image];
}
//定時器懶加載
-(NSTimer *)timer{
    if (!_timer) {
        _timer  = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
    }
    return _timer;
}
//定時器開啟后重復(fù)執(zhí)行的方法
-(void)timerAction{
    [self.scrollView setContentOffset:CGPointMake(kwidth*2, 0)];
}
@end

輪播圖調(diào)用



在控制器中引入頭文件,并在viewDidLoad中調(diào)用

- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationController.navigationBar.translucent = NO;

//創(chuàng)建數(shù)組,語法糖寫法不需要初始化數(shù)組
    self.array = @[[UIImage imageNamed:@"1-1.jpg"],[UIImage imageNamed:@"1-2.jpg"],[UIImage imageNamed:@"1-3.jpg"],[UIImage imageNamed:@"1-4.jpg"],[UIImage imageNamed:@"1-5.jpg"],[UIImage imageNamed:@"1-6.jpg"],[UIImage imageNamed:@"1-7.jpg"],[UIImage imageNamed:@"1-8.jpg"],[UIImage imageNamed:@"1-9.jpg"],[UIImage imageNamed:@"1-10.jpg"],[UIImage imageNamed:@"1-11.jpg"]];

    self.scrollViewLeftAndRight = [[UIScrollView_leftAndRight alloc]initWithFrame:self.view.frame Array:self.array];
    
    [self.view addSubview:self.scrollViewLeftAndRight];

}




最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,523評論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,251評論 4 61
  • 按老師要求修改線稿,請老師指導(dǎo),謝謝。
    aee13cc5b621閱讀 145評論 0 0
  • 聽五月天的勇敢。腦海中忽然閃過這樣一幅畫面∶一個人站在風(fēng)中,穿著最愛的深藍色大衣,任由長發(fā)在空中凌亂,時不時的撩過...
    藏夕閱讀 265評論 0 0