ios开发学习系列iOSiOS UI 基础

iOS-UIScrollView实现图片循环轮播

2016-05-27  本文已影响668人  Jinfei_Chen

图片轮播UIScrollView

相信大家都有的共识就是,绝大数类型的APP里都会有图片轮播,特别是电商类的APP里更是用得多,今天我就利用UIScrollView实现个简单的图片全屏轮播
废话不说,上代码:
1.首先在拓展里定义需要用到的宏和变量
#define CJFScreenWidth ([UIScreen mainScreen].bounds.size.width)
#define CJFScreenHeight ([UIScreen mainScreen].bounds.size.height)
@property (nonatomic, strong) UIScrollView *scrollView;
@property (nonatomic, strong) UIPageControl *pageCtrl;
@property (nonatomic, strong) UIView *CJFView;

2、然后逐步实现如下方法

第一步:
#pragma mark 1、创建轮播视图scrollView
-(void)layoutScrollView {

// 创建scrollView
self.scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, CJFScreenWidth, CJFScreenHeight)];

// 设置scrollView的可滚动区域
self.scrollView.contentSize = CGSizeMake(8*CJFScreenWidth, 0);

// 设置scrollView的背景颜色
self.scrollView.backgroundColor = [UIColor brownColor];

// 设置scrollView滚动条的显示
self.scrollView.showsHorizontalScrollIndicator = NO;

// 设置委托代理并遵守<UIScrollViewDelegate>
self.scrollView.delegate = self;

// 设置scrollView的分页效果
self.scrollView.pagingEnabled = YES;

// 添加到父视图
[self.view addSubview:self.scrollView];

}

第二步:
#pragma mark 2、添加图片到scrollView
-(void)layoutImageView {

for (int i = 0; i < 8; i++) {
    // 创建图片名字符串
    NSString *imgN = [NSString stringWithFormat:@"%dpic.jpg", (i+1)];
    // 加载图片
    UIImage *img = [UIImage imageNamed:imgN];
    // 创建图片视图
    UIImageView *imgV = [[UIImageView alloc]initWithImage:img];
    // 设置图片视图的frame
    imgV.frame = CGRectMake(0, 0, CJFScreenWidth, CJFScreenHeight);
    // 创建子scrollView
    UIScrollView *subScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(i*CJFScreenWidth, 0, CJFScreenWidth, CJFScreenHeight)];
    // 把imgV添加到子scrollView中
    [subScrollView addSubview:imgV];
    // 设置委托(代理)
    subScrollView.delegate = self;
    // 设置scrollView的可缩小比例
    subScrollView.minimumZoomScale = 0.5;
    subScrollView.maximumZoomScale = 2;
    // 设置隐藏横向和竖向的滚动条
    subScrollView.showsVerticalScrollIndicator = NO;
    subScrollView.showsHorizontalScrollIndicator = NO;
    
    // 添加到父视图
    [self.scrollView addSubview:subScrollView];
    }

}

第三步:
#pragma mark 3、添加分页控件pageControl
-(void)layoutPageControl {
// 创建分页控件
self.pageCtrl = [[UIPageControl alloc]initWithFrame:CGRectMake(10, CJFScreenHeight-40, CJFScreenWidth-20, 30)];

// 设置分页控件的总页数
self.pageCtrl.numberOfPages = 8;

// 添加到父视图
[self.view addSubview:self.pageCtrl];

// 实现pageCtrl的响应方法
[self.pageCtrl addTarget:self action:@selector(pageCtrlChangeAction:) forControlEvents:UIControlEventValueChanged];

}

第四步:
#pragma mark 4、实现scrollView的scrollViewDidScroll:方法
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
// 设置分页控件与scrollView相对应的currentPage
// 利用scrollView的当前偏移量计算
self.pageCtrl.currentPage =
(int)self.scrollView.contentOffset.x / CJFScreenWidth;
}

第五步:

#pragma mark 5、实现pageCtrl的pageCtrlChangeAction:方法
-(void)pageCtrlChangeAction: (id)sender {
// 设置scrollView的偏移量
self.scrollView.contentOffset = 
CGPointMake(self.pageCtrl.currentPage * CJFScreenWidth, 0);    
}

第六步:
#pragma mark 6、实现缩放的响应方法
- (UIView *)viewForZoomingInScrollView:(UIScrollView )scrollView {
// 告诉代理,当前响应缩放操作的是哪一个子视图
return [scrollView.subviews objectAtIndex:0];
}
第七步:
#pragma mark 7、添加定时器并实现响应方法
-(void)timerAction: (id)sender {
// 利用静态变量来控制图片的循环
static int i = 0;
if (i == 8) {
i = 0;
}
// 利用scrollView的偏移量实现轮播图片的播放
self.scrollView.contentOffset = CGPointMake(i
CJFScreenWidth, 0);
i++;
}

3、编译运行(当然这里用到的图片需要提前放到项目目录里)。

上一篇下一篇

猜你喜欢

热点阅读