28.UIScrollView和UIPageController

来源:互联网 发布:淘宝hd不能登录 编辑:程序博客网 时间:2024/05/21 09:43

1.初始化一个UIScrollView对象

#import "MainViewController.h"#define WIDTH self.view.frame.size.width#define HEIGHT self.view.frame.size.height@interface MainViewController ()<UIScrollViewDelegate>@end@implementation MainViewController- (void)viewDidLoad {    [super viewDidLoad];    self.view.backgroundColor = [UIColor greenColor];    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 20, 375, 647)];    [self.view addSubview:scrollView];    [scrollView release];    //重要的属性,设置scrollView的滚动范围    scrollView.contentSize = CGSizeMake(WIDTH * 10, HEIGHT);//<<->    //按页码进行滚动    scrollView.pagingEnabled = YES;    //设置代理人    scrollView.delegate = self;    scrollView.tag = 100;    //偏移量,把起始图片定义在某个位置    scrollView.contentOffset = CGPointMake(WIDTH * 2, 0);    //关掉边界回弹的效果,默认是YES    scrollView.bounces = NO;    //关闭水平和垂直的滚动条规作为两个子视图添加到scrollVIew在子实图里,通过把滚动条效果关闭,这两个视图就不会添加到scrollView的子视图里    NSLog(@"%@",scrollView.subviews);//--->打印有七个视图    scrollView.showsHorizontalScrollIndicator = YES;    scrollView.showsVerticalScrollIndicator = YES;    //scrollView的缩放比例    //scrollView.maximumZoomScale = 2;    //scrollView.minimumZoomScale = 0.5;    //原始的缩放比例    //scrollView.zoomScale = 1;

2.添加播放图片

为了使永久播放八张图片: ABCDEFGH, 我们在scrollView最前面放上最后一张图片, 在最后放上第一张图片.所以总公有10张图片:HABCDEFGHA –当播放或者左划到最后一张图片A时, 我们就通过UIScrollView的contentOffset属性将偏移量变为:scrollView.contentOffset = CGPointMake(WIDTH, 0), 我们就可以继续播放或者向左划.(当播放或者左划到第一张图片H时, 我们把当前偏移量变为和右边的H的偏移量)

NSString *imageName1 = [NSString stringWithFormat:@"bg7.jpg"];    UIImage *image1 = [UIImage imageNamed:imageName1];    //通过图片名来创建UIImageView    UIImageView *imageView1 = [[UIImageView alloc] initWithImage:image1];    imageView1.frame = CGRectMake( 0, 0, WIDTH, HEIGHT);    [scrollView addSubview:imageView1];//--------->    for (int i = 0; i < 8; i++) {        NSString *imageName = [NSString stringWithFormat:@"bg%d.jpg",i ];        UIImage *image = [UIImage imageNamed:imageName];        //通过图片名来创建UIImageView        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];        imageView.frame = CGRectMake((i+1) * WIDTH, 0, WIDTH, HEIGHT);        [scrollView addSubview:imageView];        [imageView release];    }//--------->    NSString *imageName10 = [NSString stringWithFormat:@"bg0.jpg"];    UIImage *image10 = [UIImage imageNamed:imageName10];    //通过图片名来创建UIImageView    UIImageView *imageView10 = [[UIImageView alloc] initWithImage:image10];    imageView10.frame = CGRectMake( WIDTH * 9, 0, WIDTH, HEIGHT);    [scrollView addSubview:imageView10];    //添加一个定时器,让图片自动播放    [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(changeImage) userInfo:nil repeats:YES];

3.实例化一个UIPageControl对象

UIPageControl *page = [[UIPageControl alloc] initWithFrame:CGRectMake(50, 600, 275, 20)];    page.alpha = 0.5;    page.backgroundColor = [UIColor cyanColor];    [self.view addSubview:page];    //图片个数和点的个数相同    page.numberOfPages = 10;    page.currentPage = 0;    page.tag = 101;    //被选中的点的颜色    page.pageIndicatorTintColor = [UIColor yellowColor];    //点的背景颜色    page.currentPageIndicatorTintColor = [UIColor greenColor];    [page release];    [page addTarget:self action:@selector(pageChangeImage:) forControlEvents:UIControlEventValueChanged];}

4.实现相关的点击事件和代理方法

- (void)changeImage{    UIScrollView *scrollView = (UIScrollView *)[self.view viewWithTag:100];    //scrollView.contentOffset = CGPointMake((scrollView.contentOffset.x + WIDTH), 0);//通常用下面带动画的这个方法    [scrollView setContentOffset:CGPointMake((scrollView.contentOffset.x + WIDTH), 0) animated:YES];    if (scrollView.contentOffset.x == WIDTH * 9) {        scrollView.contentOffset = CGPointMake(WIDTH, 0);    }    //通过播放图片去对应控制currentPageIndicator    UIPageControl *page = (UIPageControl *)[self.view viewWithTag:101];    page.currentPage = scrollView.contentOffset.x/375;}//用currentPageIndicator去控制当前显示哪张图片- (void)pageChangeImage:(UIPageControl *)page{    UIScrollView *scrollView = (UIScrollView *)[self.view viewWithTag:100];    [scrollView setContentOffset:CGPointMake(page.currentPage * WIDTH, 0) animated:YES];    NSLog(@"%ld",page.currentPage);}#pragma mark - delegate//只要滚动就会触发- (void)scrollViewDidScroll:(UIScrollView *)scrollView{    NSLog(@"开始滚动");}//减速停止的时候会触发- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{    if (scrollView.contentOffset.x == 0) {        scrollView.contentOffset = CGPointMake(WIDTH * 8, 0);    }    else if (scrollView.contentOffset.x == WIDTH * 9) {        scrollView.contentOffset = CGPointMake(WIDTH, 0);    }}//返回一个可以缩放的视图页面- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{    return [scrollView.subviews firstObject];}

5.简单的效果图如下

这里写图片描述
这里写图片描述

0 0
原创粉丝点击