码迷,mamicode.com
首页 > 其他好文 > 详细

12-25 学习图片滚动器

时间:2015-12-25 22:12:50      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:

//

//  ViewController.m

//  图片滚动器

//

//  Created by Mac on 15/12/25.

//  Copyright © 2015年 Mac. All rights reserved.

//

 

#import "ViewController.h"

 

@interface ViewController () <UIScrollViewDelegate>

//从stroyboad中拖来的控件

@property (weak, nonatomic) IBOutlet UIScrollView *scrollVIew;

@property (weak, nonatomic) IBOutlet UIPageControl *pageController;

 

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    NSUInteger count = 5;

//    获得scrollView的尺寸大小,以简便后面的使用。

    CGSize size = self.scrollVIew.frame.size;

//   动态生成5个iconView

    for (int i = 0; i < count; i ++ ) {

        UIImageView *iconView = [[UIImageView alloc]init];

//调用addSubview方法将生成的iconView加入到scrollView中

        [self.scrollVIew addSubview:iconView];

//利用图片命名的规律将图片赋给iconView

        NSString *imgName = [NSString stringWithFormat:@"img_%02d",i+1];

        iconView.image = [UIImage imageNamed:imgName];

//给每个iconView的位置赋值

        CGFloat x = i * size.width;

        iconView.frame = CGRectMake(x, 0, size.width, size.height);

    }

//    设置滚动范围,是所有的iconView的宽度总和

    self.scrollVIew.contentSize = CGSizeMake(size.width*count, 0);

//    self.scrollVIew.backgroundColor = [UIColor redColor];

//    关闭水平进度条,打开页面效果,设置代理(controller)

    self.scrollVIew.showsHorizontalScrollIndicator = NO;

    self.scrollVIew.pagingEnabled = YES;

    self.scrollVIew.delegate = self;

//    设置定时器,并加入runloop线程中,调用nextImage方法

//    //      1 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(action:) userInfo:nil repeats:NO];

//    TimerInterval : 执行之前等待的时间。比如设置成1.0,就代表1秒后执行方法

//    

//    target : 需要执行方法的对象。

//    

//    selector : 需要执行的方法

//    

//    repeats : 是否需要循环

    NSTimer *timer = [NSTimer timerWithTimeInterval:2 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];

    NSRunLoop *runloop = [NSRunLoop currentRunLoop];

    [runloop addTimer:timer forMode:NSDefaultRunLoopMode];

    

    

}

 

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

- (void)nextImage

{

//    获得pageController的页数

    NSInteger page =  self.pageController.currentPage;

    if (page == self.pageController.numberOfPages - 1) {

        page = 0;

    }else{

        page++;

    }

//    获得下一张应当滚动到的位置

    CGFloat offsetX = page * self.scrollVIew.frame.size.width;

//    调用动画效果

    [UIView animateWithDuration:2 animations:^{

        self.scrollVIew.contentOffset = CGPointMake(offsetX, 0);

    }];

    

}

#pragma mark - scrollView的代理方法

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

//    当scrollView滚动时,调用的方法,代理是controller

//    设置页数

    NSUInteger page =  scrollView.contentOffset.x / scrollView.frame.size.width;

    self.pageController.currentPage = page;

}

 

@end

----------------------------------------------分割---------------------------------------------

还有很多的地方不太明白,比如

//    设置定时器,并加入runloop线程中,调用nextImage方法

//    //      1 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(action:) userInfo:nil repeats:NO];

//    TimerInterval : 执行之前等待的时间。比如设置成1.0,就代表1秒后执行方法

//    

//    target : 需要执行方法的对象。

//    

//    selector : 需要执行的方法

//    

//    repeats : 是否需要循环

    NSTimer *timer = [NSTimer timerWithTimeInterval:2 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];

中,

      1NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(action:) userInfo:nil repeats:NO]; 

生成的定时器,target应当是需要执行方法的对象,在这里是SELF,也就是定时器自己,但是在后续的nextImage方法中,

- (void)nextImage

{

//    获得pageController的页数

    NSInteger page =  self.pageController.currentPage;

    if (page == self.pageController.numberOfPages - 1) {

        page = 0;

    }else{

        page++;

    }

//    获得下一张应当滚动到的位置

    CGFloat offsetX = page * self.scrollVIew.frame.size.width;

//    调用动画效果

    [UIView animateWithDuration:2 animations:^{

        self.scrollVIew.contentOffset = CGPointMake(offsetX, 0);

    }];

中self显然不是定时器自己而是Viewcontroller,这一点非常不明白 ,待解决

感觉自己对self和super关键字了解的还不够。

12-25 学习图片滚动器

标签:

原文地址:http://www.cnblogs.com/BJTUzhengli/p/5076941.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!