分页文件大小怎么设置置uiscrollview的分页大小

Swift实现可自定义分页宽度的UIScrollView
转载 & & 作者:CD826Dong
这篇文章主要为大家详细介绍了Swift实现可自定义分页宽度的UIScrollView,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
最近在开发新版的APP时需要一个可自定义分页宽度的图片轮播组件。刚开始自己觉得在这个万能的互联网上早就应该有一个大侠为我们封装好了,我只需要下载、拷贝、粘贴、修改一下代码就可以了。谁知一圈下来,不知道是自己没搜到,还是什么其它原因,根本就找不到。所以,一狠心就自己开干了。
我们先看一下需要的效果,如下图:
总起来说,所需要功能有如下几项:
可自定义分页的宽度,并且在两边可以显示相邻两项的一部分,从而用户知道可以滑动;
可以无限轮播;
可以自动轮播。
对于无限轮播和自动轮播在网上一搜索一大把。这里我就不详细讲了,其原理就是第一页和最后一页对contentOffset做一下特殊处理,其它没有什么玄机。
而对于定义分页的宽度经过一番搜索之后实现的方法也基本上处于同一,原理如下图:
把所能滚动的视图的宽度定为所需要的宽度,并把它放入另外一个View中,同时把clipsToBounds设置为false,这样相邻的两个页面就会显示在ScrollView两边的空白地方,而不是被切除不显示。另外,如果能够让Scroll View的两边的空白地方也可以滑动,那么需要将View Enhancer的点击事件同时作用到Scroll View上。
Ok,既然原理都懂了,那么下手开干就不是问题了。代码我就不在这里贴了,可以去我的github上下载,如果喜欢别忘了star一下哦。
看一下示例是如何使用的:
class ScrollViewPagingDemoViewController: UIViewController
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(scrollPagingView)
// 添加你的Page view,如:
let view1 = UIView(frame: CGRectZero)
view1.backgroundColor = UIColor(red: 0xff/255.0, green: 0x2d/255.0, blue: 0x41/255.0, alpha: 1.0)
view1.layer.borderColor = UIColor(red: 0xff/255.0, green: 0x2d/255.0, blue: 0x41/255.0, alpha: 1.0).CGColor
view1.layer.borderWidth = 0.5
view1.layer.cornerRadius = 5
scrollPagingView.addPage(view1)
let view2 = UIView(frame: CGRectZero)
view2.backgroundColor = UIColor(red: 0x00/255.0, green: 0x7a/255.0, blue: 0xff/255.0, alpha: 1.0)
view2.layer.borderColor = UIColor(red: 0x00/255.0, green: 0x7a/255.0, blue: 0xff/255.0, alpha: 1.0).CGColor
view2.layer.borderWidth = 0.5
view2.layer.cornerRadius = 5
scrollPagingView.addPage(view2)
let view3 = UIView(frame: CGRectZero)
view3.backgroundColor = UIColor(red: 0x4b/255.0, green: 0xd9/255.0, blue: 0x64/255.0, alpha: 1.0)
view3.layer.borderColor = UIColor(red: 0x4b/255.0, green: 0xd9/255.0, blue: 0x64/255.0, alpha: 1.0).CGColor
view3.layer.borderWidth = 0.5
view3.layer.cornerRadius = 5
scrollPagingView.addPage(view3)
let view4 = UIView(frame: CGRectZero)
view4.backgroundColor = UIColor(red: 0xff/255.0, green: 0x96/255.0, blue: 0x00/255.0, alpha: 1.0)
view4.layer.borderColor = UIColor(red: 0xff/255.0, green: 0x96/255.0, blue: 0x00/255.0, alpha: 1.0).CGColor
view4.layer.borderWidth = 0.5
view4.layer.cornerRadius = 5
scrollPagingView.addPage(view4)
// 用户点击事件,如果需要的话
let tapGesture = UITapGestureRecognizer(target:self, action: #selector(ScrollViewPagingDemoViewController.scrollViewTapAction(_:)))
scrollPagingView.addGestureRecognizer(tapGesture)
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
// 设置大小,并初始化setup方法必须调用
self.scrollPagingView.frame = CGRect(x: 0, y: 100, width: self.view.bounds.width, height: 240)
self.scrollPagingView.setup()
private lazy var scrollPagingView: CDScrollPagingView = {
let scrollPagingView = CDScrollPagingView()
// 控制页与页之间的间隔,默认为10
scrollPagingView.itemSpacing = 10.0
// 是否显示分页指示器,默认显示
scrollPagingView.showPageControl = true
// 自动切换的时间间隔,默认为3s,0表示不自动切换
scrollPagingView.timeInterval = 3.0
return scrollPagingView
func scrollViewTapAction(sender: CDScrollPagingView){
if let curPage = scrollPagingView.currentPage() {
let alertController = UIAlertController(title: "系统提示",
message: "您点击第\\(curPage)页", preferredStyle: .Alert)
let okAction = UIAlertAction(title: "Ok", style: .Default, handler: nil)
alertController.addAction(okAction)
self.presentViewController(alertController, animated: true, completion: nil)
需要说明的有以下几点:
分页的宽度可以通过设置CDScrollPagingView.pageWidth的值大小来控制,默认为0.85即整个宽度的85%
页与页之间的间隔可以通过CDScrollPagingView.itemSpacing来设置,默认值为10.0
分页指示器可以控制是否显示,控制的参数为CDScrollPagingView.showPageControl
自动轮播的时间间隔可以通过scrollPagingView.timeInterval来控制,默认为3s,如果设置为0表示不进行自动轮播
另外,如果想为每个页添加点击事件或者页面中控件需要添加事件处理是非常麻烦的,因为UIScrollView已经对事件做了处理,所以如果直接绑定事件处理的话会没有任何反应,这个也把我折腾了好久。不过,对于这种轮播控件的需求大部分应该是点击了某个页面后进行一些处理,因此CDScrollPagingView提供了一个方法currentPage()来获取当前是第几页,这样就可以根据这个值进行处理了。具体可以看上面的示例代码。
这个控件我也只是开发了最基础的一些功能,不过已经满足了自己APP的需要。后续如果需要可能还会需要增加一些动效。
如果感兴趣,大家可以到github下载。
P.S. 这个分页控件里面最少要有3个页面,否则会崩溃。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具GSSliderView(类似于UISlider)+ UIScrollView做的分页选择
查看次数:594
下载次数:77
上传时间:
大小:132 B
自己用imageView加touch,画了一个slider,类似于UISlider,但是功能较API功能全面。加上scrollView做了一个分页选择。.m文件内注释很少,欢迎留言交流。
您还没有登录!请或
下载过该代码的还下载了
本周热门下载
&2018 Chukong Technologies,Inc.
京公网安备89怎么设置uiscrollview的分页大小_百度知道
怎么设置uiscrollview的分页大小
我有更好的答案
设置你的UIScrollView的宽度为280;开启分页模式:self.pagingEnabled = YES;关闭self.clipsToBounds = NO;
这样超出范围的视图也会显示。然后重写UIScrollView所在的parentView的hitTest事件,让其返回值是UIScrollView对
采纳率:98%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。怎么设置uiscrollview的分页大小_百度知道
怎么设置uiscrollview的分页大小
我有更好的答案
骤一:设置scrollView的代理步骤二。步骤五:让控制器遵守UIScrollView的协议步骤三:实现UIScrollView协议的缩放方法。步骤四:设置UIScrollView的最大和最小缩放比例: 按option键 对图片进行伸缩
采纳率:92%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。UIScrollView+PageControl实现分页效果 - 简书
UIScrollView+PageControl实现分页效果
分页功能(重点)
如果图片名称有规律,尺寸也有规律,那么可以用for循环 创建imageView
设置contentSize = CGSizeMake (图片个数*W,H)
细节:contentSize = CGSizeMake(图片个数*H,O)高度设置0也可以
O代表在垂直方向不能滚动
隐藏滚动条
storyboard :showsHorzontal勾掉
代码 :showsHorizontal
开启分页功能:pagingEnabled = YES
分页标准:以scrollView的尺寸为一页
storyboard:UIPage Control控件
因为UIPage Control控件是scrollView的子控件会被scrollView挡住
UIPageControl和scrollView同层级,才不会被挡住
监听滚动,改变页码
currentPage
1.当scrollView停止滚动的时候显示页码(苹果)
scrollViewDidEndDraggin: willDecelerate:
decelerate == NO
计算页码,设置页码
scrollViewDidEndDcelerating:
计算页码: 偏移量的x值除以scrollView的宽度
设置页码:currentPage = page
2.哪边图片显示比例大,就滚动到哪一页(示例程序)
scrollViewDidScroll:
四舍五入:(int)(小数 + 0.5)
page = (int) (contentOffset.x /scrollView.size.W + 0.5)
手动设置总页数
numberOfPages = 图片个数
图片个数为1时候,隐藏pageControl
设置pageControl.alpha = 0.0
pageControl.hidden = YES
hidesForSinglePage = YES
pageControl显示自定义的图片
当前页显示current
其他页显示other
xcode6.4头文件中有成员变量
- xcode6.4之后变成私有的属性
私有:currentPageImage
私有:pageImage
self.pageControl setValue:[UIImage imageNamed:@"current"]forKeyPath:@"_currentPageImage"
self.pageControl setValue:[UIImage imageNamed:@"other"]forKeyPath:@"_pageImage"
每隔一段时间滚动到下一页
定时器:每隔一段时间做一件事情
[NSTimer scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:YES]
计算下一页页码:当前页码 + 1
currentPage + 1
setContentOffset: (页码*scrollView的宽度,0)animated:
定时器一直在工作,当用户想往前滚动的时候,图片却一直往后滚动
当用户操作界面的时候,让定时器停止
scrollViewWillBeginDragging: 用户即将拖拽scrollView
停止定时器
定义定时器属性weak,内部有一个看不见的指针在引用
[self.timer invalidate]
self.timer = nil(属性是strong时才写)
scrollViewDidEndDragging:用户已经停止拖拽
开启定时器
NSTimer scheduledTimerWithTimeInterval:
开启定时器方法返回的是一个自动执行任务的定时器
最好将开启定时器,停止定时器抽两个方法
问题:频繁创建、销毁定时器对象
定时器特点决定的
注意定时器方法里,userInfo的作用
线程:用来执行任务的
特点:同一时间只能执行一个任务
主线程:程序一启动,就会创建一条默认的线程
作用:负责显示刷新UI界面,处理与用户的交互事件
[[NSRunloop mainRunloop] addTimer:self.timer forMode:NSRunLoopCommonModes]将定时器添加到runLoop中
目的:不管主线程在做什么操作,都要分配一定的时间处理定时器
NSDefaultRunLoopMode:默认,同一时间只能执行一个任务
NSRunLoopCommonModes:公用,分配一定的事件处理其他任务
多线程原理:1s——&一万个0.0001s
cpu在多个任务中来回快速切换
感觉同时执行,那是假象
#import @class XRCarouselVtypedef void(^ClickBlock)(NSInteger index);//pageControl的显示位置typedef enum {
PositionNone,
//默认值 == Po...
掌握 UIScrollView的常见属性 UIScrollView的常用代理方法 UIScrollView的缩放 UIScrollView和UIPageControl的分页 NSTimer的使用 什么是UIScrollView 移动设备的屏幕大小是极其有限的,因此直接展示在...
一、APP生命周期 //1、程序加载完毕 - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchO //UIAppl...
*7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block或__weak给其重新命名一遍 写的方法 (1)Bolck 的实现:返回值(^名字)(形式参数……)=^返回值(实参……){代码,有返回值的话就返回}; (2)...
又是一年清明祭,整个四月也因为这个节日蒙上了浓得化不开的哀思,让人不由地联想到了那个平日里大家讳莫如深,却又无从回避的沉重话题——死亡。草木有荣枯,日月有升落。本是稀疏平常的生老病死自然规律,却因为心中有爱,多了太多的不舍和眷恋。 1 提及死亡,我的脑海中不断浮现一些画面:...
最近被外派到政府工作,上班时间有弹性制变成了固定的九点,这意味着八点半起床的我,要八点半出门。 时间预算的很好,7点50起床,然后刷牙洗脸吃饭。穿上高跟鞋戴上口罩赶上早高峰,将自己瘦小的个子塞进拥挤的地铁,再被人流挤进缝隙里。憋着一口气等着在某一个站可以稍稍放松一些,即使已...
AbstractQueuedSynchronizer是J.U.C的基石,分析名称可得 1. Synchronizer,同步器 对同步状态进行管理,为实现各种同步组件(比如锁)提供基础。 2. Abstract,抽象 继承重写AQS指定的方法,定义同步状态的语义(比如独占锁)...
http://www.runoob.com/java/java-object-classes.html

我要回帖

更多关于 uiscrollview分页滚动 的文章

 

随机推荐