UIScrollView 基本使用 和 循环播放(NSTimer)

以下的代码其实也是存在很多不足的,但刚开始学习的时候可以拿来作为参考,后期有很好的开元库直接拿来使用。

需求:在界面上循环播放几张固定大小的图片,也可以通过手势滑动切换图片

思路:
            1,代码实例化UIScrollView(也可以通过故事版或者xib来创建UI,但本文内容只讲解代码实现的情况)
            2,for循环创建UIImageView并添加到UIScrollView
            3,通过NSTimer实现循环播放UIScrollView


重点:
            1.在创建滚动视图中的子视图的时候,要注意,第一个创建的子视图的坐标应该是从零开始的,之前出错的地方已经用红线标出

原理:
            1.可以百度一下UIScrollView的原理,其实它就是一张很长的View或者很高的View,通过改变远点坐标的方式来显示滚动视图中的更多的内容
            2.
            self.timer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];
   
        //    定时器 适合用来隔一段时间做一些间隔比较长的操作
        //    NSTimeInterval:多长多件操作一次
        //    target :操作谁
        //    selector : 要操作的方法
        //    userInfo: 传递参数
        //    repeats: 是否重复






代码:
//
//  ViewController.m
//  Scroll_01
//
//  Created by kenshin on 15-8-22.
//  Copyright (c) 2015年 kenshin. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()<UIScrollViewDelegate>
@property (nonatomic, strong) UIScrollView *scrollView;//滚动视图容器
@property (nonatomic, strong) UIPageControl *pageControl;//显示滚动视图显示的当前“页”其实滚动视图是“一张很长的View”
@property (nonatomic, strong) NSTimer *timer;
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(30, 20, 320, 440)];
   
    //设置内容的滚动范围
    [_scrollView setContentSize:CGSizeMake(320 * 6, 0)];
    //开启滚动分页功能,如果不需要这个功能可以关闭
    [_scrollView setPagingEnabled:YES];

    //隐藏横向与纵向的滚动条
    [_scrollView setShowsVerticalScrollIndicator:NO];
    [_scrollView setShowsHorizontalScrollIndicator:NO];
    //在本类中代理scrollView的整体事件
    [_scrollView setDelegate:self];
   
     //切记!for循环里面的从表是从0开始算起的,之前i从1开始,结果导致第一张图的坐标从320开始算起了,于是第一张图片显示在了scrollView的320,0的位置
    for (int i = 0; i < 6; i ++)
    {
        NSLog(@"%d", i);
        //这里给每一个ScrollView添加一个图片和一个按钮
        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(i * 320, 0, 320, 340)];
        NSString *imgs = [[NSString alloc] initWithFormat:@"%d.png",i+1];
        [imageView setImage:[UIImage imageNamed:imgs]];
       
        //把每页需要显示的View添加进ScrollerView
        [_scrollView addSubview:imageView];
    }
   
    //整体再将ScrollView显示在窗口中
    [self.view addSubview:_scrollView];
   
    //页面控制小工具
    //它会在底部绘制小圆点标志当前显示页面
    _pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, 330, self.view.frame.size.width, 20)];
    //设置页面的数量
    [_pageControl setNumberOfPages:6];
   
    //监听页面是否发生改变
    [_pageControl addTarget:self action:@selector(changePage:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:_pageControl];
   
    //开启定时器?
    [self addTimer];
}

- (void)changePage:(id)sender
{
    NSLog(@"-------------------页面发生了改变");//该方法没有被调用
}
//手指离开屏幕后ScrollView还会继续滚动一段事件直到停止
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    NSLog(@"结束滚动后缓冲滚动彻底结束时调用");
    NSLog(@"视图宽度:%f", scrollView.contentOffset.x);
    NSLog(@"frame宽度:%f", self.view.frame.size.width);
}

- (void) scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
    NSLog(@"结束滚动后开始缓冲滚动时调用");
}

- (void) scrollViewDidScroll:(UIScrollView *)scrollView
{
    //页面滚动时调用【scrollView.contentOffset.x== 滚动视图的总宽度, 320== 单个图片的宽度】
    [_pageControl setCurrentPage:fabs(scrollView.contentOffset.x/320.f)];
}

//开始滚动的时候调用
- (void) scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    //关闭定时器【注意:定时器一旦被关闭,无法再开启】
    [self removeTimer];
   
    NSLog(@"开始滚动时调用moving。。。。。");
}

- (void) scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    NSLog(@"即将结束滚动时调用ending。。。。。");
    //开启定时器
    [self addTimer];
}
/*开启定时器*/
- (void)addTimer
{
    self.timer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];
}

//关闭定时器
- (void)removeTimer
{
    [self.timer invalidate];
}

- (void)nextImage
{
    int page = (int)self.pageControl.currentPage;

    if(page == 6)
    {
        page = 0;
    }
    else
    {
        page++;
        if(page == 6)
        {
            page = 0;
        }
    }
   
    //滚动scrollView
    CGFloat x = page * self.scrollView.frame.size.width;
    self.scrollView.contentOffset = CGPointMake(x, 0);
}
@end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值