滚动视图创建

这建立一个滚动视图,首先我们建立需要的属性

@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页
    }   
}


最后,我们来完成刚刚操作时间选取器和操作pageController的action

// 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];
}

这样,我们就将我们的滚动试图完成了。



原文地址:https://www.cnblogs.com/AbeDay/p/5026960.html