[How to] UIScrollView的使用方法
1.简介
延续前一个博客使用Xib来创建view,本文我们创建一个带有PageControlView的ScrollView的table的headView,如下图:
具有自动滚动:
具有拖拽完毕后,自动滚动继续效果:
2.实现
本文中将在TableView的headView中增减一个scrollView和PageControl两个控件来展示你的热点商品信息。
同样的我们还是使用xib来包装这个局部。
1.按照如下新建xib文件,并设置Custom Class 为之后创建的自定义View类。
在这个xib设计中,两个View设定高度为1,作为两条分隔横线来使用。
需要特别注意的是:ScrollerView与PageControl一定要有一定要按照如图所示先定义ScrollView然后在定义PageControlView这样在实际云顶的时候ScrollView才不会覆盖掉PageControlView。在使用代码创建的时候也应该这种顺序进行addsubview操作。
2.定义完后需要定义xib对应的View class文件:
XFHeadView.h
#import <UIKit/UIKit.h> @interface XFHeadView : UIView // 需要显示的所有图片信息 @property (nonatomic, strong) NSArray *pictsList; // 类创建方法 +(instancetype) headViewInit; @end
XFHeadView.m
// // XFHeadView.m // How to create groupBuy page // // Created by apple on 15/12/17. // Copyright © 2015年 apple. All rights reserved. // #import "XFHeadView.h" @interface XFHeadView()<UIScrollViewDelegate> @property (weak, nonatomic) IBOutlet UIScrollView *scrollerView; @property (weak, nonatomic) IBOutlet UIPageControl *indexView; // 计算使用变量 @property(nonatomic,assign) CGSize scrollViewSize; // 自动滚动timer @property(nonatomic, strong) NSTimer *timer; @end @implementation XFHeadView +(instancetype) headViewInit; { // 从xib文件中加载 view XFHeadView * headView = [[[NSBundle mainBundle] loadNibNamed:@"XFHeadView" owner:nil options:nil]lastObject]; // 设定尺寸的计算变量 headView.scrollViewSize = headView.scrollerView.bounds.size; // 设定scrollerView的代理为当前view对象 headView.scrollerView.delegate = headView; // 设定一些固定的控件配置 // 禁止纵向滚动 headView.scrollerView.showsHorizontalScrollIndicator = NO; // 分页显示 headView.scrollerView.pagingEnabled = YES; // 返回 return headView; } -(void)addAutoNextPageTimer { // 如果已有timer在运行则将其停止销毁 if (self.timer != nil && self.timer.isValid) { [self.timer invalidate]; self.timer = nil; } // 新建timer NSTimer *timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(nextPage) userInfo:nil repeats:YES]; self.timer = timer; // 将此timer加入到主loop中去,并设定NSRunLoopCommonModes,防止在主loop中阻塞 NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; [runLoop addTimer:timer forMode: NSRunLoopCommonModes]; } /** * 滚动到下一页 */ -(void)nextPage { // 设定pageControl,在这里不这是pageControl变量的值,这个值到代理方法中计算 NSInteger page = self.indexView.currentPage; ) { page = ; } else{ page++; } /** * 根据当前页码来控制scroll的off位置,去显示正确的图片 */ CGFloat offsetX = page * self.scrollerView.frame.size.width; [UIView animateWithDuration:1.0 animations:^{ self.scrollerView.contentOffset = CGPointMake(offsetX, ); }]; } /** * 设定图片信息 * * @param pictsList pictsList description */ -(void) setPictsList:(NSArray *)pictsList { _pictsList = pictsList; // 设定UIPageControl self.indexView.numberOfPages = pictsList.count; self.indexView.currentPage = ; // 首先需要将将scrollView上所有字view,也就是全部图片清除 [self.scrollerView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; // 设定需要加载的图片 ; i < pictsList.count; i++) { // 创建图片空间 UIImageView *imageView = [[UIImageView alloc] init]; [self.scrollerView addSubview:imageView]; // 设定图片 NSString *imageName = pictsList[i]; imageView.image = [UIImage imageNamed:imageName]; // 设定在scrollView中每一张图的排版 CGFloat x = i * self.scrollViewSize.width; imageView.frame = CGRectMake(x, , self.scrollViewSize.width, self.scrollViewSize.height); } // 设置滚动空间的滚动范围,只有横向滚动,无纵向滚动 self.scrollerView.contentSize = CGSizeMake(pictsList.count * self.scrollViewSize.width, ); // 开始自动滚动 [self addAutoNextPageTimer]; } #pragma mark --scrollView的代理方法 // 正在滚动 - (void) scrollViewDidScroll:(UIScrollView *)scrollView { // 计算pageControl的值 ) / self.scrollerView.frame.size.width; self.indexView.currentPage = page; } // 当点住scrollView不让图片自动滚动的时候停止自动化timer -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { [self.timer invalidate]; self.timer = nil; } -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { [self addAutoNextPageTimer]; } @end
3.代码说明:
ScrollView拥有代理属性,将代理设置为本类:
// 设定scrollerView的代理为当前view对象 headView.scrollerView.delegate = headView;
4.使用自定义View
在controller中只要简单的将此View创建并赋值给headView属性即可:
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. XFHeadView *headView = [XFHeadView headViewInit]; headView.pictsList = @[@"headimage_01", @"headimage_02", @"headimage_03", @"headimage_04"]; self.goodsTableView.tableHeaderView = headView; 。。。。 。。。。 }
3.总结
ScrollView空间关键点在于设置内部图片的位置,你可以将ScrollView想象成一个潜水镜,在发生scrol的时候其实是scrollView这个潜水镜在移动,而内部内容并没有移动。
[How to] UIScrollView的使用方法的更多相关文章
- UIScrollView的delegate方法妙用之让UICollectionView滑动到某个你想要的位置
一个UICollectionView有好多个cell,滑动一下,谁也不知道会停留在哪个cell,滑的快一点,就会多滑一段距离,反之则会滑的比较近,这正是UIScrollview用户体验好的地方. 如果 ...
- 【UIScrollView】基本方法+基本描述
scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(, , , )]; scrollView.backgroundColor = [ ...
- 关于UIScrollView属性和方法的总结
iOS中UIScollView的总结 在iOS开发中可以说UIScollView是所有滑动类视图的基础,包括UITableView,UIWebView,UICollectionView等等,UIScr ...
- 关于UIScrollView属性跟方法的总结
iOS中UIScollView的总结 在iOS开发中可以说UIScollView是所有滑动类视图的基础,包括UITableView,UIWebView,UICollectionView等等,UIScr ...
- [转]IOS 学习笔记(8) 滚动视图(UIScrollView)的使用方法
下面介绍pageControl结合ScrollView实现连续滑动翻页的效果,ScrollView我们在应用开发中经常用到,以g这种翻页效果还是很好看的,如下图所示: 通过这个例子,我们重点学习UIS ...
- IOS UIScrollView常用代理方法
iOS UIScrollView代理方法有很多,从头文件中找出来学习一下 //只要滚动了就会触发 - (void)scrollViewDidScroll:(UIScrollView *)scrollV ...
- UIScrollView 的代理方法简单注解
//减速停止了时执行,手触摸时执行执行 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView; //只要滚动了就会触发 ...
- ios滚动UIScrollView的setContentOffset方法
在UIScrollView,setContentOffset方法的功能是跳转到你指定内容的坐标,[self.scroview setContentOffset:CGPointMake(0, 50) a ...
- UIScrollView的代理方法(delegate)
// ViewController.m // 05-UIScrollView的代理(delegate) #import "ViewController.h" @interface ...
随机推荐
- CenOS shell脚本
1.先查看脚本解释器 [es@bigdata-senior01 ~]$ echo $SHELL /bin/bash 2.编写最简单的脚本 vi test.sh#第一行的脚本声明(#!)用来告诉系统使用 ...
- POJ3678:Katu Puzzle——题解
http://poj.org/problem?id=3678 总觉得这题比例题简单. 设a为x取0的点,a+n为x取1的点. 我们还是定义a到b表示取a必须取b. 那么我们有: 当AND: 1.当c= ...
- BZOJ4514:[SDOI2016]数字配对——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4514 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj ...
- AOJ.865 青铜莲花池 (BFS)
AOJ.865 青铜莲花池 (BFS) 题意分析 典型的BFS 没的说 代码总览 #include <iostream> #include <cstdio> #include ...
- AOJ.866 飞越原野 (三维BFS)
AOJ.866 飞越原野 (三维BFS) 题意分析 点我挑战题目 相比于普通的BFS,要多一维来记录当前剩余的体力.而且还要额外的一层循环来处理,飞过的路程. 代码总览 #include <io ...
- 1.61 三角形O(nlogn)做法
书里给出比较无脑的做法,三个for循环复杂度是n的立方.如果先把数列排序,依次判断连续三个数是否能形成三角形,可以把时间复杂度控制在nlogn. #include<stdio.h> ...
- python高效学习路线图
- PHP检测json格式数据
首先要记住json_encode返回的是字符串, 而json_decode返回的是对象 判断数据不是JSON格式: 复制代码代码如下: function is_not_json($str){ ...
- FileProvider记录下
Mark下FileProvider,阿里巴巴Android开发手册有如下要求:[强制]应用间共享文件时,不要通过放宽文件系统权限的方式去实现,而应使用FileProvider. 知识点记录:1. An ...
- POJ 1698 最大流
Alice's Chance Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7327 Accepted: 2992 De ...