侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130555 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

IOS自学之——UIScrollView,Timer

2024-05-10 星期五 / 0 评论 / 0 点赞 / 6 阅读 / 7055 字

开头容我先矫情下,哈哈。最近一直在自学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在这里,等以后知识够了,再慢慢分析。

第一篇博文写给自己,愿心之所愿,无所不及。坚持!

广告 广告

评论区