//
// 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关键字了解的还不够。