开头容我先矫情下,哈哈。最近一直在自学IOS开发,不知道怎么的总想写点什么以记录自己的学习经历,给自己留下些许回忆的篇章。本人去年7月份计算机本科毕业,目前在一家公司从事主板驱动PM。相当于Intel
开头容我先矫情下,哈哈。最近一直在自学IOS开发,不知道怎么的总想写点什么以记录自己的学习经历,给自己留下些许回忆的篇章。本人去年7月份计算机本科毕业,目前在一家公司从事主板驱动PM。相当于Intel driver team的接口,将driver这块的issue做基本分析然后交由Intel去debug。感觉很累害的样子有木有~~其实和技术沾不上边,主要还是经验的积累。工作快一年了,感觉自己内心想做的是问题的解决者,而不是问题的制造者。还是想做做开发,于是借着大学还没忘记的知识重拾开发之路。愿心之所向,无所不及!
开始正题吧,主要思想是通过创建3个UIImageView对象(centerImageView, leftImageView, rightImageView)来记录当前显示的ImageView,上一张ImageView, 下一张ImageView。通过scrollView的contentOffset来判断用户的操作是向左滑动还是向右滑动,然后重置这3个UIImageView以完成功能。
先看看代码吧,建议大家在Xcode里面运行然后根据自己的思路去实现看看能不能达到效果。由于本人也是刚刚开始自学,知识欠缺,希望和大家共同进步。
//// ViewController.m// pageViewTest//// Created by 88 on 16/5/28.// Copyright © 2016年 YJ. All rights reserved.//#import "ViewController.h"#define imageViewCount 3@interface ViewController () <UIScrollViewDelegate>@property(nonatomic, strong) UIScrollView *scrollView;@property(nonatomic, strong) UIImageView *leftImageView;@property(nonatomic, strong) UIImageView *centerImageView;@property(nonatomic, strong) UIImageView *rightImageView;@property(nonatomic, strong) UIPageControl *pageControl;@property(nonatomic, strong) NSArray *images;@property(nonatomic, assign) NSInteger currentPage; //定义当前页@property(nonatomic, strong) NSTimer *timer; //添加定时器@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; _images = @[@"img_00", @"img_01", @"img_02", @"img_03", @"img_04"]; //仅仅只是为了方便测试 [self addViews]; //1.添加视图控件 [self initView]; //2.初始化视图控件,默认设置第一张显示}- (void)addViews{ //1.添加scrollView CGFloat scrollViewX = 7; CGFloat scrollViewY = 30; CGFloat scrollViewW = 400; CGFloat scrollViewH = 174; //图片素材这么大,就干脆直接写啦^_^ _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(scrollViewX, scrollViewY, scrollViewW, scrollViewH)]; [self.view addSubview:_scrollView]; _scrollView.contentSize = CGSizeMake(scrollViewW * imageViewCount, scrollViewH); //设置contentSize大小 _scrollView.pagingEnabled = YES; //开启分页,(补充:每次平移scrollView的宽度>>这样就可以用来自定义每次要移动的宽度了) _scrollView.delegate = self; //添加代理 _scrollView.backgroundColor = [UIColor grayColor]; //2.添加imageView _leftImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, scrollViewW, scrollViewH)]; [_scrollView addSubview:_leftImageView]; _centerImageView = [[UIImageView alloc] initWithFrame:CGRectMake(scrollViewW, 0, scrollViewW, scrollViewH)]; [_scrollView addSubview:_centerImageView]; _rightImageView = [[UIImageView alloc] initWithFrame:CGRectMake(scrollViewW * 2, 0, scrollViewW, scrollViewH)]; [_scrollView addSubview:_rightImageView]; //3.添加pageControl _pageControl = [[UIPageControl alloc] init]; CGSize size = [_pageControl sizeForNumberOfPages:_images.count]; //此方法会根据pageControl的总页数设置合适的大小 CGFloat pageControlW = size.width; CGFloat pageControlH = size.height; CGFloat pageControlX = scrollViewX + scrollViewW - pageControlW; CGFloat pageControlY = scrollViewY + scrollViewH - pageControlH; _pageControl.frame = CGRectMake(pageControlX, pageControlY, pageControlW, pageControlH); [self.view addSubview:_pageControl]; _pageControl.pageIndicatorTintColor = [UIColor redColor]; _pageControl.currentPageIndicatorTintColor = [UIColor blueColor]; _pageControl.numberOfPages = _images.count; //设置总页数(这个属性不设置,pageControl就不会出来)}- (void)initView{ _currentPage = 0; _leftImageView.image = [UIImage imageNamed:_images[(_currentPage + _images.count -1) % _images.count]]; _centerImageView.image = [UIImage imageNamed:_images[_currentPage]]; _rightImageView.image = [UIImage imageNamed:_images[(_currentPage + 1) % _images.count]]; //设置第一张图片显示 _scrollView.contentOffset = CGPointMake(_scrollView.bounds.size.width, 0); _pageControl.currentPage = _currentPage; //初始化的时候就开起定时器,实现图片轮播 _timer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(nextPage) userInfo:nil repeats:YES];}- (void)nextPage{ _scrollView.contentOffset = CGPointMake(_scrollView.bounds.size.width + 0.1, 0); //相当于右移 [self reloadViews]; //重新加载三张图片及初始化 }- (void)startTimer{ _timer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(nextPage) userInfo:nil repeats:YES];}- (void)stopTimer{ [_timer invalidate]; _timer = nil;}#pragma <UIScrollViewDelegate>//开始滚动时- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ [self stopTimer];}//结束滚动时- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ [self reloadViews]; //1.重新加载三张图片及初始化 [self startTimer];}- (void)reloadViews{ CGPoint offset = _scrollView.contentOffset; if (offset.x < _scrollView.bounds.size.width) //证明向左滑动 { _currentPage = (_currentPage + _images.count - 1) % _images.count; } else //证明向右滑动 { _currentPage = (_currentPage + 1) % _images.count; } //1.重新设着左右中三张图片 _leftImageView.image = [UIImage imageNamed:_images[(_currentPage + _images.count -1) % _images.count]]; _centerImageView.image = [UIImage imageNamed:_images[_currentPage]]; _rightImageView.image = [UIImage imageNamed:_images[(_currentPage + 1) % _images.count]]; _scrollView.contentOffset = CGPointMake(_scrollView.bounds.size.width, 0); //2.重新将scrollView移至中间位置 _pageControl.currentPage = _currentPage; //3.设置pageControl}@end
最后借用一句之前看的哪位大牛的博客,具体名字忘了。Sorry~~~
在滚动操作过程中尽量减少需要执行的事件,多放在滚动结束后执行。因为滚动操作本身就十分消耗性能~ 这句先mark在这里,等以后知识够了,再慢慢分析。
第一篇博文写给自己,愿心之所愿,无所不及。坚持!