版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】iOS如何实现无限循环轮播图效果
这篇文章主要介绍了iOS如何实现无限循环轮播图效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让在下带着大家一起了解一下。本文实例为大家分享了iOS实现无限循环轮播图的具体代码,供大家参考,具体内容如下轮播图基础控件,左滑右滑都能无限循环预览思路(1)在第一张左边加一张最后一张的图片,往左滑到边缘结束后计算偏移量迅速定位成最后一张#pragma
mark
-
pagecontrol事件
//
这个是点击小圆点条进行切换,到边不能循环
-
(void)pageControlTouched
{
//
点击的时候停止计时
[self.kvTimer
setFireDate:[NSDate
distantFuture]];
//
滑到指定页面
NSInteger
curPageIdx
=
_pageControl.currentPage;
CGFloat
offsetX
=
self.frame.size.width
*
(curPageIdx
+
1);
[self.scrollView
setContentOffset:CGPointMake(offsetX,
0)
animated:YES];
//
重新开启定时器
[self.kvTimer
setFireDate:[NSDate
dateWithTimeInterval:kTimerInterval
sinceDate:[NSDate
date]]];
}
#pragma
mark
-
滚动事件
-
(void)scrollViewWillBeginDragging:(UIScrollView
*)scrollView
{
//
printf("start
drag\n");
//
记录偏移量
preOffsetX
=
scrollView.contentOffset.x;
//
开始手动滑动时暂停定时器
[self.kvTimer
setFireDate:[NSDate
distantFuture]];
}
-
(void)scrollViewDidEndDecelerating:(UIScrollView
*)scrollView
{
//
printf("end
drag\n");
//
左右边界
CGFloat
leftEdgeOffsetX
=
0;
CGFloat
rightEdgeOffsetX
=
self.frame.size.width
*
(_pageCount
+
1);
if
(scrollView.contentOffset.x
<
preOffsetX)
{
//
左滑
if
(scrollView.contentOffset.x
>
leftEdgeOffsetX)
{
self.pageControl.currentPage
=
scrollView.contentOffset.x
/
self.frame.size.width
-
1;
}
else
if
(scrollView.contentOffset.x
==
leftEdgeOffsetX)
{
self.pageControl.currentPage
=
_pageCount
-
1;
}
if
(scrollView.contentOffset.x
==
leftEdgeOffsetX)
{
self.scrollView.contentOffset
=
CGPointMake(self.frame.size.width
*
_pageCount,
0);
}
}
else
{
//
右滑
//
设置小点
if
(scrollView.contentOffset.x
<
rightEdgeOffsetX)
{
self.pageControl.currentPage
=
scrollView.contentOffset.x
/
self.frame.size.width
-
1;
}
else
if
(scrollView.contentOffset.x
==
rightEdgeOffsetX)
{
self.pageControl.currentPage
=
0;
}
//
滑动完了之后从最后多余页赶紧切换到第一页
if
(scrollView.contentOffset.x
==
rightEdgeOffsetX)
{
self.scrollView.contentOffset
=
CGPointMake(self.frame.size.width,
0);
}
}
//
结束后又开启定时器
[self.kvTimer
setFireDate:[NSDate
dateWithTimeInterval:kTimerInterval
sinceDate:[NSDate
date]]];
}
-
(void)scrollViewDidEndScrollingAnimation:(UIScrollView
*)scrollView
{
//
printf("end
scroll\n");
}
#pragma
mark
-
定时器控制的滑动
//
往右边滑
-
(void)changePageRight
{
//
设置当前需要偏移的量,每次递增一个page宽度
CGFloat
offsetX
=
_scrollView.contentOffset.x
+
CGRectGetWidth(self.frame);
//
根据情况进行偏移
CGFloat
edgeOffsetX
=
self.frame.size.width
*
(_pageCount
+
1);
//
最后一个多余页面右边缘偏移量
//
从多余页往右边滑,赶紧先设置为第一页的位置
if
(offsetX
>
edgeOffsetX)
{
//
偏移量,不带动画,欺骗视觉
self.scrollView.contentOffset
=
CGPointMake(self.frame.size.width,
0);
//
这里提前改变下一个要滑动到的位置为第二页
offsetX
=
self.frame.size.width
*
2;
}
//
带动画滑动到下一页面
[self.scrollView
setContentOffset:CGPointMake(offsetX,
0)
animated:YES];
if
(offsetX
<
edgeOffsetX)
{
self.pageControl.currentPage
=
offsetX
/
self.frame.size.width
-
1;
}
else
if
(offsetX
==
edgeOffsetX)
{
//
最后的多余那一页滑过去之后设置小点为第一个
self.pageControl.currentPage
=
0;
}
}
//
往左边滑
-
(void)changePageLeft
{
//
设置当前需要偏移的量,每次递减一个page宽度
CGFloat
offsetX
=
_scrollView.contentOffset.x
-
CGRectGetWidth(self.frame);
//
根据情况进行偏移
CGFloat
edgeOffsetX
=
0;
//
最后一个多余页面左边缘偏移量
//
从多余页往左边滑动,先设置为最后一页
if
(offsetX
<
edgeOffsetX)
{
self.scrollView.contentOffset
=
CGPointMake(self.frame.size.width
*
_pageCount,
0);
offsetX
=
self.frame.size.width
*
(_pageCount
-
1);
}
//
带动画滑动到前一页面
[self.scrollView
setContentOffset:CGPointMake(offsetX,
0)
animated:YES];
if
(offsetX
>
edgeOffsetX)
{
self.pageControl.currentPage
=
offsetX
/
self.frame.size.width
-
1;
}
else
if
(offsetX
==
edgeOffsetX)
{
//
最后的多余那一页滑过去之后设置小点为最后一个
self.pageControl.currentPage
=
_pageCount
-
1;
}
}(2)总共只有左、中、右三个页面,每次滑动后重新进行数据跟页面的关联#pragma
mark
-
定时器回调
-
(void)changePageRight
{
//
往右滑并且设置小圆点,永远都是滑到第三页
[_scrollView
setContentOffset:CGPointMake(self.frame.size.width
*
2,
0)
animated:YES];
[self
resetPageIndex:YES];
}
-
(void)changePageLeft
{
//
往左滑,永远都是滑动到第一页
[_scrollView
setContentOffset:CGPointMake(0,
0)
animated:YES];
[self
resetPageIndex:NO];
}
#pragma
mark
-
重新设置索引和页面图片
-
(void)resetPageIndex:(BOOL)isRight
{
if
(isRight)
{
//
根据之前的page下标来修改
if
(_prePageIndex
==
_pageCount
-
1)
{
//
到头了就回到第一个
_pageControl.currentPage
=
0;
}
else
{
//
这里用_prePageIndex来算,否则点击小圆点条会重复计算了
_pageControl.currentPage
=
_prePageIndex
+
1;
}
}
else
{
if
(_prePageIndex
==
0)
{
_pageControl.currentPage
=
_pageCount
-
1;
}
else
{
_pageControl.currentPage
=
_prePageIndex
-
1;
}
}
_prePageIndex
=
_pageControl.currentPage;
}
-
(void)resetPageView
{
//
每次滑动完了之后又重新设置当前显示的page时中间的page
UIImageView
*leftPage
=
[_scrollView
viewWithTag:1000];
UIImageView
*middlePage
=
[_scrollView
viewWithTag:1001];
UIImageView
*rightPage
=
[_scrollView
viewWithTag:1002];
if
(_pageControl.currentPage
==
_pageCount
-
1)
{
//
n-
1
->
n
->
0
leftPage.image
=
_kvImageArray[_pageControl.currentPage
-
1];
middlePage.image
=
_kvImageArray[_pageControl.currentPage];
rightPage.image
=
_kvImageArray.firstObject;
}
else
if
(_pageControl.currentPage
==
0)
{
//
n
->
0
->
1
//
到尾部了,改成从头开始
leftPage.image
=
_kvImageArray.lastObject;
middlePage.image
=
_kvImageArray.firstObject;
rightPage.image
=
_kvImageArray[1];
}
else
{
//
x
-
1
->
x
->
x
+
1
leftPage.image
=
_kvImageArray[_pageControl.currentPage
-
1];
middlePage.image
=
_kvImageArray[_pageControl.currentPage];
rightPage.image
=
_kvImageArray[_pageControl.currentPage
+
1];
}
//
重新设置偏移量
_scrollView.contentOffset
=
CGPointMake(self.frame.size.width,
0);
}
#pragma
mark
-
pagecontrol事件
-
(void)pageControlTouched
{
[self
stopTimer];
NSInteger
curPageIndex
=
_pageControl.currentPage;
if
(curPageIndex
>
_prePageIndex)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- JJF 2184-2025电子计价秤型式评价大纲(试行)
- 校园各项消防安全管理工作计划三篇
- 【可行性报告】2025年防毒面具项目可行性研究分析报告
- 照明工业刻录机行业行业发展趋势及投资战略研究分析报告
- 音乐一年级下册教学计划
- 开学典礼演讲稿范文15篇
- 志愿者2022工作计划安排三篇
- 语文教研组工作计划
- 中航重机验资报告
- 工作保证书集合15篇
- 2024广东省广州市天河区中考一模语文试题含答案解析
- 前台文员的工作灵活性与适应能力计划
- 第八届全国测绘地理信息行业职业技能竞赛理论考试题库及答案
- 广东省珠海市香州区2024-2025学年九年级物理上学期期末教学质量监测试题
- 人教版历史2024年第二学期期末考试七年级历史试卷(含答案)
- 循证护理学(理论部分)智慧树知到答案2024年复旦大学
- 2024年秋八年级历史上册 第24课 人民解放战争的胜利教案 新人教版
- 提高护士应用PDA落实患者身份识别准确率 2
- 游戏产品自行审核工作报告
- 国家开放大学2024春《1494员工劳动关系管理》期末考试真题及答案-开
- 1.1 我与社会 课件-2024-2025学年道德与法治八年级上册(统编版2024)
评论
0/150
提交评论