iOS开发---轮播图模块(普通版)
2015-07-27 20:47
393 查看
// 用ScrollView实现图片轮播 // ViewController.m // Slider-轮播 // // Created by JamesXiang on 15/7/21. // Copyright (c) 2015年 JamesXiang. All rights reserved. // #import "ViewController.h" @interface ViewController () <UIScrollViewDelegate> @property (nonatomic, strong) UIScrollView *scrollView; @property (nonatomic, strong) UIPageControl *pageControl; @property (nonatomic, assign) int sliderIndex; @property (nonatomic, strong) NSTimer *timer; @property (nonatomic, assign) int count; @property (nonatomic, assign) double sliderWidth; @property (nonatomic, assign) double sliderHeight; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // 只留一个入口,程序解耦 [self loadSlider]; } - (void)loadSlider { [self setParam]; // 设置相关参数 [self loadSliderContainer]; // 加载轮播容器 [self loadSliderItem]; // 加载轮播内容 [self loadPageController]; // 加载轮播 [self sliderBegin]; // 轮播开始 } - (void)setParam { self.sliderIndex = 0; // 起始索引 self.count = 5; // 轮播图片个数 self.sliderWidth = self.view.frame.size.width; // slider宽度 self.sliderHeight = 160; // slider高度 } // 设置轮播容器 - (void)loadSliderContainer { // scrollView可见宽度不能设置为内容的总宽度,会造成无法滚动 UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 20, self.sliderWidth, self.sliderHeight)]; // 设置分页滚动 scrollView.pagingEnabled = YES; // 隐藏水平方向的滚动条 scrollView.showsHorizontalScrollIndicator = NO; scrollView.delegate = self; scrollView.contentSize = CGSizeMake(self.sliderWidth*self.count, self.sliderHeight); self.scrollView = scrollView; [self.view addSubview:scrollView]; } // 设置轮播器内容 - (void)loadSliderItem { for (int i = 0; i < self.count; i++) { UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(self.sliderWidth * i, 0, self.sliderWidth, self.sliderHeight)]; imgView.userInteractionEnabled = YES; // 为imageView添加手势识别监听器 [imgView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(sliderClick)]]; UIImage *img = [UIImage imageNamed:[NSString stringWithFormat:@"slider%d.jpg", i]]; imgView.image = img; [self.scrollView addSubview:imgView]; // 以下代码为用btn替换imageView,存在的问题是有时按钮的点击和滑动事件区分不开,导致可点击时不可滑动的问题,具体解决方案还没有想到 /* UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(self.sliderWidth * i, 0, self.sliderWidth, self.sliderHeight)]; btn.tag = i; [btn addTarget:self action:@selector(sliderClick:) forControlEvents:UIControlEventTouchUpInside]; [btn setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"slider%d.jpg", i]] forState:UIControlStateNormal]; // 取消点击时的高亮状态 [btn setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"slider%d.jpg", i]] forState:UIControlStateHighlighted]; [self.scrollView addSubview:btn]; */ } } - (void)sliderClick { NSLog(@"点击事件..."); // 这里可以利用index来控制每个图片的点击事件 } // 加载pageControl - (void)loadPageController { UIPageControl *pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, 160, self.sliderWidth, 20)]; pageControl.numberOfPages = self.count; pageControl.currentPage = 0; pageControl.hidesForSinglePage = YES; _pageControl = pageControl; [self.view addSubview:pageControl]; } // 开始轮播 - (void)sliderBegin { self.timer = [NSTimer scheduledTimerWithTimeInterval:2.5 target:self selector:@selector(autoChangeImg) userInfo:nil repeats:YES]; } // 切换轮播图片和按钮 - (void)autoChangeImg { self.sliderIndex++; if (self.sliderIndex == 5) { self.sliderIndex = 0; } [UIView animateWithDuration:0.8 animations:^{ self.scrollView.contentOffset = CGPointMake(self.sliderIndex * self.sliderWidth, 0); [self updateSliderIndex]; }]; } // 更新当前轮播索引 - (void)updateSliderIndex { self.sliderIndex = self.scrollView.contentOffset.x / self.sliderWidth; self.pageControl.currentPage = self.sliderIndex; } - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { [self.timer invalidate]; } - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { [self sliderBegin]; } - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { [self updateSliderIndex]; } @end
相关文章推荐
- javascript实现图片自动和可控的轮播切换特效
- js实现图片点击左右轮播
- JQuery实现的图文自动轮播效果插件
- jQuery制作简洁的图片轮播效果
- 简单的js图片轮换代码(js图片轮播)
- 一步一步教你写淡入淡出带注释的图片轮播插件(二)
- iOS开发之路--微博“更多”页面
- jquery制作多功能轮播图插件
- 一步一步教你写淡入淡出带注释的图片轮播插件(一)
- jQuery插件boxScroll实现图片轮播特效
- 带左右箭头图片轮播的JS代码
- Android实现Banner界面广告图片循环轮播(包括实现手动滑动循环)
- JavaScript实现带标题的图片轮播特效
- JS实现简易图片轮播效果的方法
- js实现点击左右按钮轮播图片效果实例
- jQuery插件slicebox实现3D动画图片轮播切换特效
- 原生js和jquery实现图片轮播特效
- iOS开发之路--微博骨架搭建
- IOS开发代码分享之获取启动画面图片的string
- IOS开发之路--C语言数组和字符串