封装轮播图

第一步:在外界也就是ViewController里提供你需要的数据,一般是轮播图的位置和有多少图片

代码如下:

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    self.automaticallyAdjustsScrollViewInsets = NO;

    // 添加轮播图

    // 设置轮播图的frame

    RotateView *rotate = [RotateView rotateViewWithFrame:CGRectMake(0, 60, sWIDTH, 240)];

    // 给轮播图传一个数组

     NSArray *imageArray = @[@"http://www.ppt123.net/beijing/uploadfiles_8374/201203/2012032517501327.jpg", @"http://pic13.nipic.com/20110415/1347158_132411659346_2.jpg",@"http://pic25.nipic.com/20121126/8305779_171431388000_2.jpg",@"http://pic2.ooopic.com/01/03/51/25b1OOOPIC19.jpg"];

    rotate.photoArray = imageArray;

    // 点击轮播图的图片进入详情页面

    __weak ViewController *test = self;

    rotate.block = ^(NSInteger imageIndex){

    DetailViewController *detailVC = [[DetailViewController alloc] init];

    [test.navigationController pushViewController:detailVC animated:YES];

    NSLog(@"%ld",imageIndex);

    };

    

    [self.view addSubview:rotate];

}

2、在你封装好的view里面实现无限轮播:

代码如下:

// 初始化方法

-(instancetype)initWithFrame:(CGRect)frame{

    self = [super initWithFrame:frame];

    if (self) {

        self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, kWidth, kHeight)];

        _scrollView.pagingEnabled = YES;

        _scrollView.delegate = self;

        _scrollView.showsHorizontalScrollIndicator = NO;

        [self addSubview:_scrollView];

    }

    return self;

}

// 遍历构造器方法

+ (instancetype)rotateViewWithFrame:(CGRect)frame{

    RotateView *rotate = [[RotateView alloc] initWithFrame:frame];

    return rotate;

}

// 重写set方法,接收数组的传值

- (void)setPhotoArray:(NSArray *)photoArray {

    _photoArray = photoArray;

     _scrollView.contentSize = CGSizeMake(kWidth * _photoArray.count, 0);

    [self addImageViewForScrollView];

    [self addPageControl];

    [self addTimerLoop];

}

// scrollView添加图片和button

- (void)addImageViewForScrollView {

    if (_photoArray != nil) {

        for (int i = 0; i < _photoArray.count; i++) {

            UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(kWidth * i, 0, kWidth, kHeight)];

            [imageView sd_setImageWithURL:_photoArray[i] placeholderImage:nil];

           

            UIButton *button = [[UIButton alloc] initWithFrame: CGRectMake(kWidth * i, 0, kWidth, kHeight)];

            [button addTarget:self action:@selector(tapImageButton:) forControlEvents:UIControlEventTouchUpInside];

            button.tag = i + 100;

            [_scrollView addSubview:imageView];

            [_scrollView addSubview:button];

        }

    }

}

// 点击button,通过block传值

- (void) tapImageButton:(UIButton *)button {

    if (_block) {

        _block (button.tag);

    }

}


// 创建pageControl

- (void)addPageControl {

    self.pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, kHeight - 20, kWidth, 20)];

    _pageControl.numberOfPages = _photoArray.count;

    _pageControl.currentPage = 0;

    _pageControl.pageIndicatorTintColor = [UIColor grayColor];

    _pageControl.currentPageIndicatorTintColor = [UIColor purpleColor];

    [_pageControl addTarget:self action:@selector(changePage:) forControlEvents:(UIControlEventValueChanged)];

    [self addSubview:_pageControl];


}

// 实现方法

- (void)changePage:(UIPageControl *)pageControl {

    _scrollView.contentOffset = CGPointMake(_pageControl.currentPage * kWidth, 0);


}

// 实现代理方法

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

        _pageControl.currentPage = scrollView.contentOffset.x / kWidth;

    [self addTimerLoop];

}


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

    [_timer invalidate];

    

}

// 根据偏移量改变当前的页数

- (void)changeOffSet {

    CGFloat x = _scrollView.contentOffset.x;

    if (x >= (_photoArray.count - 1) * kWidth) {

        _scrollView.contentOffset = CGPointMake(0, 0);

        _pageControl.currentPage = 0;

        

    }else{

        _scrollView.contentOffset = CGPointMake(x + kWidth, 0);

        _pageControl.currentPage ++;

    }


}

// 添加timer

- (void) addTimerLoop {

    _timer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(changeOffSet) userInfo:nil repeats:YES];

    

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值