这建立一个滚动视图,首先我们建立需要的属性
@property (strong,nonatomic)UIScrollView *scrollView; @property (strong,nonatomic)NSMutableArray *slideImages; @property (strong,nonatomic)UIPageControl *pageControl; // 这里我们需要他们来建立相应的试图和存放图片
功能有:1.滚动视图图片的添加;2.滚动试图时间控制器的编写;3.滚动视图的大小位置的设置;4.pageController控件的建立;4.滚动试图相关属性的设置
- (void)viewDidLoad
{
[super viewDidLoad];
// 定时器 循环
[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(runTimePage) userInfo:nil repeats:YES];
// 初始化 scrollview
self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
scrollView.bounces = YES;//滚动试图是否有弹簧效果
scrollView.pagingEnabled = YES;//滚动试图的界面是否分页
scrollView.delegate = self;//滚动试图的委托对象为自己
scrollView.userInteractionEnabled = YES;//是否可以与用户交互
scrollView.showsHorizontalScrollIndicator = NO;//试图下面的水平滚动滑动条
[self.view addSubview:scrollView];
// 初始化 数组 并添加四张图片
slideImages = [[NSMutableArray alloc] init];
[slideImages addObject:@"1-1.jpg"];
[slideImages addObject:@"1-2.jpg"];
[slideImages addObject:@"1-3.jpg"];
[slideImages addObject:@"1-4.jpg"];
// 初始化 pagecontrol
self.pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(120,440,100,18)];// 初始化mypagecontrol
[pageControl setCurrentPageIndicatorTintColor:[UIColor redColor]];
[pageControl setPageIndicatorTintColor:[UIColor blackColor]];
pageControl.numberOfPages = [self.slideImages count];
pageControl.currentPage = 0;
[pageControl addTarget:self action:@selector(turnPage) forControlEvents:UIControlEventAllTouchEvents]; // 触摸mypagecontrol触发change这个方法事件
[self.view addSubview:pageControl];
// 创建四个图片 imageview
for (int i = 0;i<[slideImages count];i++)
{
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[slideImages objectAtIndex:i]]];
imageView.frame = CGRectMake((320 * i) + 320, 0, 320, 460);
[scrollView addSubview:imageView]; // 首页是第0页,默认从第1页开始的。所以+320。。。
}
// 取数组最后一张图片 放在第0页
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[slideImages objectAtIndex:([slideImages count]-1)]]];
imageView.frame = CGRectMake(0, 0, 320, 460); // 添加最后1页在首页 循环
[scrollView addSubview:imageView];
// 取数组第一张图片 放在最后1页
imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[slideImages objectAtIndex:0]]];
imageView.frame = CGRectMake((320 * ([slideImages count] + 1)) , 0, 320, 460); // 添加第1页在最后 循环
[scrollView addSubview:imageView];
//下面的三句是创建滚动视图的一个最终设置,没有了他们,这个滚动视图就运行不了
[scrollView setContentSize:CGSizeMake(320 * ([slideImages count] + 2), 460)]; // +上第1页和第4页 原理:4-[1-2-3-4]-1
[scrollView setContentOffset:CGPointMake(0, 0)];
[self.scrollView scrollRectToVisible:CGRectMake(320,0,320,460) animated:NO]; // 默认从序号1位置放第1页 ,序号0位置位置放第4页
}上面的代码中,有那么一句,就是scrollView.delegate = self;//滚动试图的委托对象为自己
所以我们要使得这个类遵循相应地协议,在接口文件的添加下面相应地语句:
@interface testScrollViewViewControllerViewController : UIViewController<UIScrollViewDelegate>
下面就来编写这个协议里面的函数,这两个函数,将我们的scrollView和pageController链接起来,然后再将他们的操作连贯起来:
// scrollview 委托函数
- (void)scrollViewDidScroll:(UIScrollView *)sender
{
int page = (int)self.scrollView.contentOffset.x/320;
page --; // 默认从第二页开始
pageControl.currentPage = page;
}
// scrollview 委托函数--完成了一个循环的设置
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
int currentPage = (int)self.scrollView.contentOffset.x/320;
if (currentPage==0)
{
[self.scrollView scrollRectToVisible:CGRectMake(320 * [slideImages count],0,320,460) animated:NO]; // 序号0 最后1页
}
else if (currentPage==([slideImages count]+1))
{
[self.scrollView scrollRectToVisible:CGRectMake(320,0,320,460) animated:NO]; // 最后+1,循环第1页
}
}
// pagecontrol 选择器的方法
- (void)turnPage
{
int page = pageControl.currentPage; // 获取当前的page
[self.scrollView scrollRectToVisible:CGRectMake(320*(page+1),0,320,460) animated:YES]; // 触摸pagecontroller那个点点 往后翻一页 +1
}
// 定时器 绑定的方法
- (void)runTimePage
{
int page = pageControl.currentPage; // 获取当前的page
page++;
page = page > 3 ? 0 : page ;
pageControl.currentPage = page;
[self turnPage];
}
这样,我们就将我们的滚动试图完成了。