首页 > 学院 > 开发设计 > 正文

IOS实现banner循环轮播

2019-11-14 18:27:35
字体:
来源:转载
供稿:网友

  在项目中把banner图片UIImageView一张一张的放入UIScrollView中,通过设置UIScrollView的pagingEnabled属性为YES,则可以做到当用户滑动banner时图片一张一张的显示,但当用户想从第一张图到最后一张图,或者从最后一张图到第一张图的时候就会卡住,简单点的做法就是判断用户swipe的方向,然后让UIScrollView自动滑动到最后一张或者第一张,这样做在动画中又显得不够自然,一下是解决办法

  假设banner图片有3张,在banner的UIScrollView中用以下的方式进行排列

第三张第一张第二张第三张第一张

UIScrollView默认滚动到第二张图片的位置,当用户滑动到第一张时,则UIScrollView自动滚动到第4张去,同理当用户滑动到最后一张时,UIScrollView自动滚动到第二张去,这些滚动都设置动画效果为NO

代码如下

h文件

#import <UIKit/UIKit.h>@interface ViewController : UIViewController@PRoperty (weak, nonatomic) IBOutlet UIScrollView *mainScroll;@property (weak, nonatomic) IBOutlet UIPageControl *pageControl;@end

m文件

#import "ViewController.h"@interface ViewController ()<UIScrollViewDelegate>{    CGFloat w;    NSMutableArray *imgArr;    NSMutableArray *pageArr;}@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    w = self.view.frame.size.width;    //page的个数    pageArr = [NSMutableArray array];    for (int i = 1; i <= 3; i++) {        [pageArr addObject:[NSString stringWithFormat:@"%d.jpg",i]];    }    //重新获取imgView的个数,将显示的第最后一张图片放在第一张,而在最后一张放置显示的第一张图片    imgArr = [NSMutableArray array];    [imgArr addObject:pageArr[pageArr.count - 1]];    for (NSString *imgSrc in pageArr) {        [imgArr addObject:imgSrc];    }    [imgArr addObject:pageArr[0]];    self.mainScroll.contentSize = CGSizeMake(w*imgArr.count, 0);    //开始塞入图片    for (int i = 0; i < imgArr.count; i++) {        NSString *imgSrc = imgArr[i];        UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(i*w, 0, w, self.mainScroll.frame.size.height)];        [imgView setImage:[UIImage imageNamed:imgSrc]];        [self.mainScroll addSubview:imgView];    }    self.pageControl.numberOfPages = pageArr.count;    self.mainScroll.bounces = NO;    self.mainScroll.pagingEnabled = YES;    self.mainScroll.showsHorizontalScrollIndicator = NO;    self.mainScroll.showsVerticalScrollIndicator = NO;    self.mainScroll.delegate = self;    //自动将scrollView移动显示的第一张图片处    [self.mainScroll setContentOffset:CGPointMake(w, 0) animated:NO];}- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {    CGFloat offsetX = scrollView.contentOffset.x;    int index = offsetX/w;    if (index == 0) {        [self.mainScroll setContentOffset:CGPointMake(w*(imgArr.count-2), 0) animated:NO];        self.pageControl.currentPage = pageArr.count - 1;    }else if (index == imgArr.count -1){        [self.mainScroll setContentOffset:CGPointMake(w, 0) animated:NO];        self.pageControl.currentPage = 0;    }else{        self.pageControl.currentPage = index - 1;    }    }@end

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表