博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
轮播图的实现步骤
阅读量:5368 次
发布时间:2019-06-15

本文共 3948 字,大约阅读时间需要 13 分钟。

1>.h声明属性

@interface RootView : UIView@property (nonatomic, strong) UIScrollView *scrollView;@property (nonatomic, strong) UIPageControl *pageControl;

2>.m实现步骤

@implementation RootView- (instancetype)initWithFrame:(CGRect)frame{    self = [super initWithFrame:frame];    if (self) {        // 添加子视图        [self addAllViews];    }    return self;}// 添加子视图- (void)addAllViews{    // 布局scrollView    // 1. 创建对象    self.scrollView = [[UIScrollView alloc] initWithFrame:self.frame];    // 2. 定义属性    // 苹果4s分配的内存: 30W 5s: 80w 6s: 100;    // 设置滚动范围    self.scrollView.contentSize = CGSizeMake(CGRectGetWidth(self.frame) * 7, 0);    // 在scrollView上放上7张图片    for (int i = 0; i < 7; i ++) {        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(CGRectGetWidth(self.frame) * i, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame))];                NSString *name = [NSString stringWithFormat:@"%d.png", i + 10];                        imageView.image = [UIImage imageNamed:name];                // 将imageView添加到scrollView上        [self.scrollView addSubview:imageView];                    }    // 设置整页滑动    self.scrollView.pagingEnabled = YES;        // 3. 添加到父视图        [self addSubview:self.scrollView];        // 布局pageControl    self.pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(self.frame) - 40, CGRectGetWidth(self.frame), 40)];    self.pageControl.backgroundColor = [UIColor grayColor];    // 小圆点的个数    self.pageControl.numberOfPages = 7;    // 当前小圆点的个数    self.pageControl.currentPageIndicatorTintColor = [UIColor redColor];    // 没有被选择的小圆点    self.pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];    [self addSubview:self.pageControl];    }

3>在ViewController里设置UIScrollView的代理Delegate和给UIPageControl添加事件

@interface RootViewController ()
@property (nonatomic, strong) RootView *rootView;@end@implementation RootViewController- (void)loadView{ self.rootView = [[RootView alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.view = self.rootView;}- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. // 4. 设置代理 self.rootView.scrollView.delegate = self; //给pageControl添加事件 [self.rootView.pageControl addTarget:self action:@selector(pageControlClick:) forControlEvents:UIControlEventValueChanged]; // 开始添加计时器,实现自动滚动 [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(timeAction:) userInfo:nil repeats:YES]; }// 实现自动滚动- (void)timeAction:(NSTimer *)time{ NSLog(@"定时"); // 获取当前pageControl(页数) NSInteger index = self.rootView.pageControl.currentPage; // 如果不是最后一页, 向后偏移一页 if (index != self.rootView.pageControl.numberOfPages - 1) { index++; } else if (index == self.rootView.pageControl.numberOfPages - 1){ // 如果是最后一页,跳到第一页 index = 0; } // 通过index修改scrollView的偏移量// self.rootView.scrollView.contentOffset = CGPointMake(index * CGRectGetWidth(self.view.frame), 0); [self.rootView.scrollView setContentOffset:CGPointMake(index * CGRectGetWidth(self.view.frame), 0) animated:YES]; self.rootView.pageControl.currentPage = index;}// 实现点击pageControl方法- (void)pageControlClick:(UIPageControl *)pageControl{ // 小圆点位置 NSInteger currentIndex = self.rootView.pageControl.currentPage; // self.rootView.scrollView.contentOffset = CGPointMake(currentIndex * self.view.frame.size.width, 0); [UIView animateWithDuration:0.5 animations:^{ self.rootView.scrollView.contentOffset = CGPointMake(currentIndex * self.view.frame.size.width, 0); }];}// 实现代理方法- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ // 改变pageCotrol的当前显示的位置 // 获取当前显示的位置 CGFloat currentX = self.rootView.scrollView.contentOffset.x; self.rootView.pageControl.currentPage = currentX / self.view.frame.size.width; }

 

转载于:https://www.cnblogs.com/leikun1113/p/5539585.html

你可能感兴趣的文章
FFmpeg进行视频帧提取&音频重采样-Process.waitFor()引发的阻塞超时
查看>>
最近邻与K近邻算法思想
查看>>
【VS开发】ATL辅助COM组件开发
查看>>
FlatBuffers In Android
查看>>
《演说之禅》I &amp; II 读书笔记
查看>>
thinkphp3.2接入支付宝支付接口(PC端)
查看>>
【转】在Eclipse中安装和使用TFS插件
查看>>
C#中Monitor和Lock以及区别
查看>>
【NOIP2017】奶酪
查看>>
5.6.3.7 localeCompare() 方法
查看>>
Linux下好用的简单实用命令
查看>>
描绘应用程序级的信息
查看>>
php环境搭建脚本
查看>>
php 编译常见错误
查看>>
MES架构
查看>>
hdu 2767(tarjan)
查看>>
sklearn之分类模型混淆矩阵和分类报告
查看>>
MySQL各存储引擎
查看>>
项目--简单导出CSV文件
查看>>
Oracle session相关数据字典(一)
查看>>