图片自动无限轮播
来源:互联网 发布:c语言开发手册 典藏版 编辑:程序博客网 时间:2024/05/21 08:55
#import "ViewController.h"
#define cnt 5
@interface ViewController () <UIScrollViewDelegate>
@property (weak, nonatomic) IBOutletUIScrollView *scrollView;
@property (weak, nonatomic) IBOutletUIPageControl *pageControl;
//创建全局的时钟
@property (nonatomic,strong)NSTimer *timer;
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
//设置代理
self.scrollView.delegate=self;
CGFloat iconViewW=self.scrollView.frame.size.width;
CGFloat iconViewh=self.scrollView.frame.size.height;
//在scrollViewW添加5张图片
for (int i=0; i<cnt; i++) {
//创建UIIimageView
UIImageView *iconView=[[UIImageViewalloc] init];
//设置frame
CGFloat iconViewX=(i+1)*iconViewW;
iconView.frame=CGRectMake(iconViewX,0, iconViewW, iconViewh);
//设置显示的图片·
NSString *imgName=[NSStringstringWithFormat:@"img_0%d",i+1];
iconView.image=[UIImageimageNamed:imgName];
//添加创建好的UIImageView控件到scrollView
[self.scrollViewaddSubview:iconView];
}
//1.在开头位置添加原来的最后一张图片
UIImageView *lastimg=[[UIImageViewalloc] init];
lastimg.image=[UIImageimageNamed:@"img_05"];
lastimg.frame=CGRectMake(0,0, iconViewW, iconViewh);
[self.scrollViewaddSubview:lastimg];
//2.在结尾位置添加原来的第一张图片
UIImageView *firstimg=[[UIImageViewalloc] init];
firstimg.image=[UIImageimageNamed:@"img_01"];
firstimg.frame=CGRectMake((cnt+1)*iconViewW,0, iconViewW, iconViewh);
[self.scrollViewaddSubview:firstimg];
//3.一开始设置ScrollView的偏移
self.scrollView.contentOffset=CGPointMake(iconViewW,0);
//scrollView的滚动必须设置contentSIze属性
self.scrollView.contentSize=CGSizeMake((cnt+2)*iconViewW,0);
//去除水平滚动条
self.scrollView.showsHorizontalScrollIndicator=NO;
//让scrollView一次滚动一张图片,也就意味着它一次应该滚动一个scrollView的宽度的倍数-- 分页显示
self.scrollView.pagingEnabled=YES;
//修改pageCOntrol显示在第0页
self.pageControl.currentPage=0;
//添加时钟
[selfcreateTimer];
}
//创建时钟
- (void) createTimer
{ self.timer=[NSTimerscheduledTimerWithTimeInterval:2target:selfselector:@selector(nextImg)userInfo:nilrepeats:YES];
//解决方案:手动添加到运行环中
//1获取主线程运行环
NSRunLoop *runloop=[NSRunLoopcurrentRunLoop];
[runloop addTimer:self.timerforMode:NSRunLoopCommonModes];
}
//下一张图片
- (void) nextImg
{
CGFloat width=self.scrollView.frame.size.width;
//1.先获取当前页码--当前是第几页
NSInteger index=self.pageControl.currentPage;//0 1 2 3 4
//2.判断是否是最后一页,如果是最后一题,就从第一张再开始,否则就下一张
if (index==cnt) {
index=1;
}
else
{
index++;
}
//重新设置scrollView的contentOffset
//self.scrollView.contentOffset=CGPointMake(index*width, 0);
//使用动画,不要使用[UIView animationWithDuration]
[self.scrollViewsetContentOffset:CGPointMake((index+1)*width,0) animated:YES];
}
//当scrollVIe进行滚动的过程中触发
- (void) scrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat width=self.scrollView.frame.size.width;
//获取当前scrollVIew的偏移值
CGFloat offset=self.scrollView.contentOffset.x;
//计算当前应该处于第几页:因为当偏移值超过一半就应该认为这一页已经翻过来了
int index=(offset+width*0.5)/width;
//y设置pageControl的CurrentPage属性
self.pageControl.currentPage=(index-1);
}
//当我们拖拽图片的时候,发现无法停止图片的自动播放:原因:你在进行拖拽的时候,时钟并没有停止,还是继续运行,同时也由于你的runloop的模式是NSRunLoopCommonModes,那么我们只能在用户开始拖拽的时候,将时钟停止(IOS里面不能停止,只能销毁),在用户停止拖拽的时候再创建时钟继续运行
- (void) scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[self.timerinvalidate];
self.timer=nil;
}
//当用户松开鼠标(停止拖拽)的时候再次创建新的时钟加入到runloop
- (void) scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
//添加时钟
[selfcreateTimer];
}
- (void) scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
CGFloat width=self.scrollView.frame.size.width;
//获取当前scrollVIew的偏移值
CGFloat offset=self.scrollView.contentOffset.x;
//计算当前应该处于第几页:因为当偏移值超过一半就应该认为这一页已经翻过来了
int index=(offset+width*0.5)/width;
if (index==cnt+1) {
[self.scrollViewsetContentOffset:CGPointMake(width,0)animated:NO];
}
else if (index==0)
{
[self.scrollViewsetContentOffset:CGPointMake(cnt*width,0)animated:NO];
}
}
- (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
[selfscrollViewDidEndScrollingAnimation:scrollView];
}
@end
- 图片自动无限轮播
- ViewPager加载图片自动无限轮播
- swiper+图片自动+无限轮播
- 无限轮播自动获取图片
- 自动无限轮播
- 自动无限轮播
- 图片无限轮播
- 图片无限轮播
- 图片无限轮播
- 图片无限轮播
- 图片无限轮播
- 图片无限轮播
- 图片无限轮播
- 图片无限轮播
- 图片无限轮播
- ViewPager图片自动+手动左右无限轮播
- Viewpager获取网络图片进行自动无限轮播
- viewpager自动无限轮播(网络请求的图片)
- Hibernate的helloworld
- 又见gcd(hdu-2504)
- UIScrollerView的常用代理方法
- Java获取当前时间
- 【bzoj1260】【CQOI2007】【涂色paint】【dp】
- 图片自动无限轮播
- 面试心得(BAT)
- Android访问权限
- OS X升级到10.11后Xcode6.4界面无iOS device选择栏的解决办法
- C/C++ 内存对齐原则及作用
- codeforces 366C C. Dima and Salad(dp)
- 多线程NSThread的简单创建和使用——创建线程的几种方式
- POJ 3913 Gnome Sequencing(水~)
- C#调用Oracle存储过程