ios图片轮播效果
ImageCarousel
简单封装的图片轮播器
内存过大由于我加载的图片分辨率较高(4k)
文件目录

使用
初始化自定义view,并提供title和图片数组,设置控制器代理
shufflingView *myView = [[shufflingView alloc]
initWithFrame:CGRectMake(0, 100, [UIScreen mainScreen].bounds.size.width,
230)];
NSArray *picDataArray = @[ @"1", @"2", @"3", @"4", @"5" ];
NSArray *titleDataArray = @[ @"1", @"2", @"3", @"4", @"5" ];
myView.picDataArray = [picDataArray copy];
myView.titleDataArray = [titleDataArray copy];
myView.titleLabelTextColor =
[UIColor colorWithRed:255/255 green:0 blue:0 alpha:1.0];
myView.isAutomaticScroll = YES;
myView.automaticScrollDelay = 2;
myView.carouselViewStyle = ImageCarouselStyleBoth;
myView.pageIndicatorTintColor = [UIColor colorWithRed:255/255 green:0/255 blue:255/255 alpha:1.0];
myView.pageControlCurrentColor =
[UIColor colorWithRed:0/255 green:255/255 blue:255/255 alpha:1.0];
myView.delegate = self;
myView.picDataArray = [picDataArray copy];
[self.view addSubview:myView];
自定义view
typedef NS_ENUM(NSInteger, ImageCarouselStyleType) {
ImageCarouselStyleNone,
ImageCarouselStyleTitle,
ImageCarouselStylePageControl,
ImageCarouselStyleBoth
};
@protocol CarouselViewDelegate <NSObject>
@optional
- (void)didClick:(NSInteger)index;
@end
@interface shufflingView : UIView
{
float _automaticScrollDelay;
ImageCarouselStyleType _carouselViewStyle;
}
@property(nonatomic, strong) NSArray *picDataArray;
@property(nonatomic, strong) NSArray *titleDataArray;
@property(nonatomic, weak) UIFont *titleLabelTextFont;
@property(nonatomic, weak) UIColor *titleLabelTextColor;
@property(nonatomic, weak) UIColor *pageIndicatorTintColor;
@property(nonatomic, weak) UIColor *pageControlCurrentColor;
// 是否自动滚动
@property(nonatomic, assign) BOOL isAutomaticScroll;
// 滚动时间间隔
@property(nonatomic, assign) float automaticScrollDelay;
/// 枚举
@property(nonatomic, assign) ImageCarouselStyleType carouselViewStyle;
@property(nonatomic, weak) id<CarouselViewDelegate> delegate;
采用一个scrollivew和三个imageview
// 默认滚动到中间imageview
[_mainScrollView setContentOffset:CGPointMake(self.bounds.size.width, 0)
animated:NO];
// 添加三个imageView
_leftImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, KViewW, KViewH)];
_rightImageView = [[UIImageView alloc]initWithFrame:CGRectMake(2*KViewW, 0, KViewW, KViewH)];
_centerImageView = [[UIImageView alloc]initWithFrame:CGRectMake(KViewW, 0, KViewW, KViewH)];
_centerImageView.userInteractionEnabled = YES;
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(scrollViewClick:)];
[_centerImageView addGestureRecognizer:tap];
[self.mainScrollView addSubview:_leftImageView];
[self.mainScrollView addSubview:_rightImageView];
[self.mainScrollView addSubview:_centerImageView];
核心代码
根据scrollview的偏移量来计算当前位于的imageView。然后重置左右两个image的图片
#pragma mark - 无限滚动核心
- (void)reloadImageViews {
// 获取当前offset
CGPoint scrollViewOffset = [_mainScrollView contentOffset];
// 如果当前位于centerImageView
if (scrollViewOffset.x == 2 * _mainScrollView.bounds.size.width) {
if (_currentImageIndex == kImageCount - 1) {
_currentImageIndex = 0;
}else {
_currentImageIndex = (_currentImageIndex +1) % kImageCount;
}
} else if (scrollViewOffset.x == 0) {
if (_currentImageIndex == 0) {
_currentImageIndex = kImageCount - 1;
}else {
_currentImageIndex = (_currentImageIndex -1) % kImageCount;
}
}
_centerImageView.image =
[UIImage imageNamed:_picDataArray[self.currentImageIndex]];
// 重新设置左右图片
_leftImageView.image =
[UIImage imageNamed:_picDataArray[self.leftImageIndex]];
_rightImageView.image =
[UIImage imageNamed:_picDataArray[self.rightImageIndex]];
_titleLabel.text = _titleDataArray[self.currentImageIndex];
_pageControl.currentPage = self.currentImageIndex;
}
滚动过程中调整pageControl
// MARK: - 滚动过程中
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGPoint scrollViewOffset = scrollView.contentOffset;
if (scrollViewOffset.x > 1.5 * _mainScrollView.bounds.size.width) {
_pageControl.currentPage = self.rightImageIndex;
_titleLabel.text = _titleDataArray[self.rightImageIndex];
} else if (scrollViewOffset.x < 0.5 * _mainScrollView.bounds.size.width) {
_pageControl.currentPage = self.leftImageIndex;
_titleLabel.text = _titleDataArray[self.leftImageIndex];
}
else {
_pageControl.currentPage = self.currentImageIndex;
_titleLabel.text = _titleDataArray[self.currentImageIndex];
}
}
效果
ios图片轮播效果
注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权
ios图片轮播效果的更多相关文章
- jQuery个性化图片轮播效果
jQuery个性化图片轮播效果 购物产品展示:图片轮播器<效果如下所示> 思路说明: 每隔一段时间,实现图片的自动切换及选项卡选中效果,鼠标划入图片动画停止,划出或离开动画开始 两个区域: ...
- iOS 图片轮播图(自动滚动)
iOS 图片轮播图(自动滚动) #import "DDViewController.h" #define DDImageCount 5 @interface DDViewContr ...
- IOS 图片轮播实现原理 (三图)
IOS 图片轮播实现原理的一种 图片轮播所要实现的是在一个显示区域内通过滑动来展示不同的图片. 当图片较少时我们可以采用在滚动视图上添加很多张图片来实现. 但是如果图片数量较多时,一次性加载过多图片会 ...
- CSS3图片轮播效果
原文:CSS3图片轮播效果 在网页中用到图片轮播效果,单纯的隐藏.显示,那再简单不过了,要有动画效果,如果是自己写的话(不用jquery等),可能要费点时间.css3的出现,让动画变得不再是问题,而且 ...
- js实现淘宝首页图片轮播效果
原文:http://ce.sysu.edu.cn/hope2008/Education/ShowArticle.asp?ArticleID=10585 <!DOCTYPE html> &l ...
- 超实用的JavaScript代码段 Item3 --图片轮播效果
图片轮播效果 图片尺寸 统一设置成:490*170px; 一.页面加载.获取整个容器.所有放数字索引的li及放图片列表的ul.定义放定时器的变量.存放当前索引的变量index 二.添加定时器,每隔2秒 ...
- JQ 实现轮播图(3D旋转图片轮播效果)
轮播图效果如下: 代码: <!DOCTYPE html> <html xmlns="/www.w3.org/1999/xhtml"> <head> ...
- axure 动态面板实现图片轮播效果(淘宝)
淘宝中经常可以看到店铺中的图片轮播效果,本经验将通过axure7.0实现 工具/原料 axure7.0 方法/步骤 下载需要轮播的图片 将图片引入至axure中,将引入的第一张图片转为 ...
- WPF3D图片轮播效果
原文:WPF3D图片轮播效果 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37591671/article/details/68059169 ...
随机推荐
- C#关于log4net(Log For Net)
1 介绍 log4net(Log For Net)是Apache开源的应用于.Net框架的日志记录工具,详细信息参见Apache网站.它是针对Java的log4j(Log For Java ...
- RAID磁盘恢复方法之一Winhex镜像硬盘与镜像中恢复数据图文
winhex镜像硬盘和ghost备份是完全不同的,ghost只能克隆或者镜像分区内正常的数据,删除的数据他是不会克隆的,所以在数据恢复应用中,ghost对我们来讲作用就不大了,而使用winhex备份( ...
- [BZOJ1146][CTSC2008]网络管理Network(二分+树链剖分+线段树套平衡树)
题意:树上单点修改,询问链上k大值. 思路: 1.DFS序+树状数组套主席树 首先按照套路,关于k大值的问题,肯定要上主席树,每个点维护一棵权值线段树记录它到根的信息. 关于询问,就是Que(u)+Q ...
- Android中选项卡功能的实现
Android中选项卡功能的实现 Android中使用TabHost和TabWidget来实现选项卡功能.TabHost必须是布局的根节点,它包含两个子节点: TabWidget,显示选项卡: Fra ...
- Ubuntu 16.04通过APT源安装QUEM虚拟机调试Linux内核
安装: sudo apt-add-repository main sudo apt-get update sudo apt-get install qemu-kvm qemu virt-manager ...
- How to determine what causes a particular wait type
By: Paul Randal Posted on: March 18, 2014 6:55 pm [Edit 2016: Check out my new resource – a comp ...
- 浅谈RBF函数
所谓径向基函数 (Radial Basis Function 简称 RBF), 就是某种沿径向对称的标量函数. 通常定义为空间中任一点x到某一中心xc之间欧氏距离的单调函数 , 可记作 k(||x-x ...
- 现在就可以使用的5个 ES6 特性
小编推荐:掘金是一个高质量的技术社区,从 ECMAScript 6 到 Vue.js,性能优化到开源类库,让你不错过前端开发的每一个技术干货.各大应用市场搜索「掘金」即可下载APP,技术干货尽在掌握. ...
- 使用ab.exe监测100个并发/100次请求情况下同步/异步访问数据库的性能差异
ab.exe介绍 ab.exe是apache server的一个组件,用于监测并发请求,并显示监测数据 具体使用及下载地址请参考:http://www.cnblogs.com/gossip/p/439 ...
- asp.net HttpModule和HttpHandler
ASP.Net处理Http Request时,使用Pipeline(管道)方式,由各个HttpModule对请求进行处理,然后到达 HttpHandler,HttpHandler处理完之后,仍经过Pi ...