滚动视图创建
这建立一个滚动视图,首先我们建立需要的属性
@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]; }
这样,我们就将我们的滚动试图完成了。