IOS 实现banner循环轮播
在项目中把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 = ; i <= ; i++) {
[pageArr addObject:[NSString stringWithFormat:@"%d.jpg",i]];
}
//重新获取imgView的个数,将显示的第最后一张图片放在第一张,而在最后一张放置显示的第一张图片
imgArr = [NSMutableArray array];
[imgArr addObject:pageArr[pageArr.count - ]];
for (NSString *imgSrc in pageArr) {
[imgArr addObject:imgSrc];
}
[imgArr addObject:pageArr[]];
self.mainScroll.contentSize = CGSizeMake(w*imgArr.count, );
//开始塞入图片
for (int i = ; i < imgArr.count; i++) {
NSString *imgSrc = imgArr[i];
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(i*w, , 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, ) animated:NO];
} - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
CGFloat offsetX = scrollView.contentOffset.x;
int index = offsetX/w;
if (index == ) {
[self.mainScroll setContentOffset:CGPointMake(w*(imgArr.count-), ) animated:NO];
self.pageControl.currentPage = pageArr.count - ;
}else if (index == imgArr.count -){
[self.mainScroll setContentOffset:CGPointMake(w, ) animated:NO];
self.pageControl.currentPage = ;
}else{
self.pageControl.currentPage = index - ;
} } @end
IOS 实现banner循环轮播的更多相关文章
- Android无限循环轮播广告位Banner
Android无限循环轮播广告位Banner 现在一些app通常会在头部放一个广告位,底部放置一行小圆圈指示器,指示广告位当前的页码,轮播展示一些图片,这些图片来自于网络.这个广告位banner ...
- 解析SwiftUI布局细节(二)循环轮播+复杂布局
前言 上一篇我们总结的主要是VStack里面的东西,由他延伸到 @ViewBuilder, 接着我们上一篇总结的我们这篇内容主要说的是下面的几点,在这些东西说完后我准备解析一下苹果在SiwftUI文档 ...
- swiper在vue项目中的循环轮播bug以及点击事件
一般的,如果是静态数据(本地数据),可以直接在mounted生命周期中初始化,循环轮播.自动播放都比较正常. 但是,如果是动态从后台获取数据的话,采用上述方法会发现,轮播图无法自动播放,也无法拖拽. ...
- 网站banner无缝轮播
网站banner无缝轮播 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- js 实现图片间隔循环轮播以及没有间隔的循环轮播
链接地址:http://blog.sina.com.cn/s/blog_75cf5f32010199dn.html 最近做了个图片循环轮播的功能.就是几张图片不断的循环滚动显示. 感觉这个方法不错所以 ...
- 超级详细 一听就会:利用JavaScript jQuery实现图片无限循环轮播(不借助于轮播插件)
前言 作为一个前端工程师,无论公司是什么行业,无论你做什么端,基本都会遇到一个避不开的动画效果:循环轮播.做轮播并不难,市场上的轮播插件有很多,其中比较著名的是swiper,使用也非常简单.但轮播插件 ...
- 解决ajax异步请求数据后swiper不能循环轮播(loop失效)问题、滑动后不能轮播的问题。
问题描述: 1.我使用axios异步请求后台的图片进行渲染后不能实现循环轮播,也就是loop失效,但是静态写死的情况下不会出现这种问题. 2. 分析: swiper的机制是:初始化的时候将swiper ...
- 非常简单的方法实现ViewPager自动循环轮播
非常简单的方法实现ViewPager自动循环轮播,见红色代码部分,其它的代码可以忽略不看. 简洁高效是我解决问题的首要出发点. package com.shuivy.happylendandreadb ...
- 利用JavaScript jQuery实现图片无限循环轮播(不借助于轮播插件)-----转载
前言 作为一个前端工程师,无论公司是什么行业,无论你做什么端,基本都会遇到一个避不开的动画效果:循环轮播.做轮播并不难,市场上的轮播插件有很多,其中比较著名的是swiper,使用也非常简单.但轮播插件 ...
随机推荐
- justify-content 定义子元素在父元素水平位置排列的顺序
justify-content 定义子元素在父元素水平位置排列的顺序,需要和display:flex使用才会生效. 有五个属性: 1.flex-start(默认值) 左对齐 2.flex-end 右 ...
- ios -仿微信有多级网页时,显示返回跟关闭按钮
@property (nonatomic, copy) NSString * url; @interface WebViewController ()<UIWebViewDelegate,UIG ...
- 【BZOJ1513】[POI2006]Tet-Tetris 3D 二维线段树
[BZOJ1513][POI2006]Tet-Tetris 3D Description Task: Tetris 3D "Tetris" 游戏的作者决定做一个新的游戏, 一个三维 ...
- iOS OC和JS的交互 javaScriptCore方法封装
一.javaScriptCore javaScriptCore是一种JavaScript引擎,主要为webKit提供脚本处理能力,javaScriptCore是开源webkit的一部分,他提供了强大的 ...
- CSS3中transform,transition和animation的简单介绍和使用方法演示样例
transform是一个属性,本质跟width,height是一样的,加上transform也就是为类添加一个变换属性. transition是一个属性.它是用来控制过渡效果的,由于用transfor ...
- Cocos2d-x 3.1 环境搭建和创建project
Cocos2d-x 3.x改版了非常多,之前搭过一次环境,可是没截图.这次趁着重装电脑,一边搭建一边截图.此博文仅仅是为了记录而不是为了教学,所以很多其它讲的是搭建过程.本文基本上參考这篇博客:htt ...
- Docker的前世今生
核心知识点: 1.Docker的构想:对应用的封装.分发.部署.运行的生命周期的管理,一次封装到处运行 2.Docker的优点:一站式解决方案 3.Docker由LXC演变而来,迟迟没有集成到Linu ...
- 改善程序与设计的55个具体做法 day8
条款20:宁以pass-by-reference-to-const 替换 pass-by-value 即 以const引用 替换值传递. 采用引用传递参数时,底层往往是用指针方式实现,因此参数传递内置 ...
- Data Structure Array: Program for array rotation
http://www.geeksforgeeks.org/array-rotation/ O(n), O(1) #include <iostream> #include <vecto ...
- curl 监控web
[root@rhel6 ~]# curl -I -s -w "%{http_code}\n" -o /dev/null http://127.0.0.1 [root@rhel6 ~ ...