说在前面 数据库分页是后台经常要使用的技术手段,有时候进行数据库查询会根据业务需要对某一字段排序,那么当待排序字段值相同时,我们得到的查询结果会是什么呢?...问题描述 数据分页时需要根据数据记录创建时间create_time字段倒序,即使用order by create_time desc,但是我们会发现,前端进行请求时获取的数据并不正确,分页中出现了一定的重复数据...问题原因 期初还很好奇,总数没问题,总查询也没问题,为什么数据会重复了,然后会把部分数据给覆盖了。...后来,通过查看SQL发现,是根据时间进行排序的,然而 这个时间 恰恰 好多数据都是 同一时间插入,或者 设置的 同一时间。 先后执行 总查询(也就是不分页),是没有重复。...这也为我们提供了避免数据分页时待排序字段值相同情况时结果无序的解决方案。 SQL中ORDER BY相同值结果乱序的具体原因 查阅了Goole和相关资料,大概总结了这种情况的原因。
在上篇博客中,给大家演示了如何利用 UICollectionView 这个强大的控件去实现一个卡片轮播的效果,后来有网友联系我说:"他遇到一个问题,当他滚动的 item 宽度与屏幕宽度一致时,滚动效果是正常的...这个问题确实是存在的,因为在 UICollectionView 的属性中,有一个分页的属性:isPagingEnabled,当设置成 true 时,每次滚动的位移量等于屏幕的宽度;当不设置这个分页属性,...有人要问那是不是 UICollectionView 这个控件就只能按照屏幕的大小来分页呢!答案当然是否定的。 那自定义滚动分页该如何实现呢!...,决定了 UICollectionView 停止滚动时的偏移量,可以通过重写这个函数来实现自定义的分页滚动,重写这个函数的逻辑思路如下: 1.定义一个坐标点 CGPoint 来记录最新滚动的偏移坐标2....定义俩个值分别为 UICollectionView 可滚动的最大偏移量与最小偏移量也是就 03.每次滚动停止都会调用上述的函数 func targetContentOffset(...), 在这个函数中有一个参数
的滚动方向是横向的 随着 UICollectionView 滚动,Cell 会自动的进行缩放,当 Cell 的中心点与 UICollectionView 的中心点重合时放大,偏离中心点时缩小 Cell...的滚动是分页滚动,而且每次停止的位置都是与UICollectionView 的中心点重合 需求已经明确了,那我们该如何去实现呢!...第二步,要实现 Cell 随 UICollectionView 滚动时具有缩放效果,就需要找一个合适的时机对 Cell 进行缩放,我的思路是先计算出 UICollectionView 整体滚动内容的中心点的...第三步,实现 Cell 的滚动是分页带阻尼的效果,并且滑动停止的时候当前放大的 Cell 居中显示,有的同学会说:UICollectionView 自带了分页效果,只需要设置 isPagingEnabled...读过我前几篇 UICollectionView 系列的小伙伴们,不知道你们还有没有印象,我写过一篇教程叫做 "使用 UICollectionView 实现分页滑动效果" 这里附上链接(使用 UICollectionView
前言 今天跟大家来聊聊一个强大的 UI 控件:UICollectionView。...思路分析 通过观察上面的图我们可以得出,这个网易云的轮播控件有三个特点,分别是: 1.支持图片手动横向滚动2.支持图片自动的滚动播放3.底部的分页控件会高亮显示出当前的图片是哪一张 好了,既然已经分析出来了它的特点...// 分页控件默认距离的边距 public var pageControlMargin: CGFloat = 10 // 分页控件大小,注意:当PageControlType...不等于自定义类型时,只能影响当前分页控件的大小,不能影响分页控件原点的大小 public var pageControlDotSize: CGSize = CGSize(width: 10, height...self.currentIndex() + 1 self.scrollToIndex(targetIndex: &targetIndex) } 到这里这个轮播控件的功能已经初步完成了
iOS UICollectionView实现跑马灯和轮播效果.gif 功能描述:WSL_RollView 是基于UICollectionView实现的支持水平和垂直两个方向上的的分页和渐进循环轮播效果...iOS UICollectionView ②、对比上面的效果图,我们还需要解决分页的宽度和循环滚动的问题。...自定义分页宽度:默认的分页宽度是UICollectionView的宽度,所以当分页宽度的不等于UICollectionView的宽度或分页间隔不等于0时会出现错误,这时就需要我们通过自定义UICollectionViewFlowLayout.../** 返回值决定了collectionView停止滚动时的偏移量 手指松开后执行 * proposedContentOffset:原本情况下,collectionView停止滚动时最终的偏移量 *...可见范围内的数据源后边的元素cell,后边首尾相连需要UICollectionView可见范围内的数据源前边的元素cell //获取首尾相连循环滚动时需要用到的元素,并重组数据源 - (void)resetDataSourceForLoop
,唯一有意思之处在于“每日歌曲推荐”这个按钮上中间的文字是会随着日期改变的,如图: image 不过实现起来也简单,中间放一个 Label 即可。...我们知道在 UICollectionView 的属性中,有一个分页的属性:isPagingEnabled,当设置成 true 时,每次滚动的位移量等于它自身 frame 的宽度;当不设置这个分页属性,它的默认值是...image 有人要问那是不是 UICollectionView 这个控件就只能按照屏幕的大小来分页呢!答案当然是否定的。我们还可以用自定义的方式来实现分页滚动。...,决定了 UICollectionView 停止滚动时的偏移量,可以通过重写这个函数来实现自定义的分页滚动,重写这个函数的逻辑思路如下: 定义一个坐标点 CGPoint 来记录最新滚动的偏移坐标 定义俩个值分别为...UICollectionView 可滚动的最大偏移量与最小偏移量也是就 0 每次滚动停止都会调用上述的函数 func targetContentOffset(...), 在这个函数中有一个参数 proposedContentOffset
用iOS 12设备找到复现路径: 先正常触发UICollectionView的初始化和cell加载 => 从UICollectionView触发界面跳转,进入下一级界面 => 触发删除Cell的业务逻辑...但是这个reloadData并不会直接触发UICollectionView马上从dataSource和delegate去获取数据和UI,而是会等到UICollectionView展示的时候再进行触发。...问题延伸 为什么iOS 13以上没有crash?...界面出现的时候会触发layoutSubviews,此时会通过_updateVisibleCellsNow回调delegate。 UICollectionView为什么会有这个crash?...dataSource询问 NSLog(@"count2:%d", [self.collectionView numberOfItemsInSection:0]); // 直接返回 当UICollectionView
UICollectionView横向分页的问题 情况 直接看图 滚前 滚后 已经设置collectionView的isPagingEnabled为true了,可是出现了这种情况,原因就是collectionView...UICollectionView: 0x7fc565076000; frame = (0 0; 375 197); clipsToBounds = YES; gestureRecognizers...contentSize: {562.5, 192.25} > 解决方案 有两种方式可以解决,数据只有11个,要分两页需要16个,那我们可以直接添加数据到16个,然后在dataSource中返回cell时进行判断及处理即可...CGSize(width: collectionViewWidth * CGFloat(nbOfScreen), height: size.height) return newSize } 注:ceil函数的作用是求不小于给定实数的最小整数...ceil(2)=ceil(1.2)=cei(1.5)=2.00 效果 至于如何让item水平布局,请参考《iOS - Swift UICollectionView横向分页滚动,cell左右排版》 附上相关项目
但是为什么会造成这种问题呢?我们来分析一下,我们模拟一下系统如何处理重用机制的,效果如下图 在上图中,我们可以看出,当cell准备加载进屏幕的时候,整个cell都已经加载完成,等待在屏幕外面了。...这是UICollectionView在用户大幅度滑动时卡顿的根本原因。用专业的术语来说,掉帧。 接下来我们就来详细的说说掉帧的问题。...当整个cell要从UICollectionView的可见区域消失的时候,这个时候会调用didEndDisplayingCell方法。接下来发生的事情和iOS9一样,cell会进入重用队列中。...在上图中,我们可以看到,我们即使任意拖动cell,整个界面也会重新排列,并且我们改变了cell的大小,整个 UICollectionView 也会重新动态的布局。...UICollectionView继承自UIScrollView,所以只需要你做的是把isPagingEnabled属性设置为True,即可开启分页的功能。
本篇博客中没有使用到什么新的技术点,如果非得说用到了什么新的技术点的话,那么勉强的说,用到了一些iOS9以后UICollectionView添加的一些新的特性。...这些技术点在之前的博客中也多次使用到,只不过本篇博客使用这些技术点来完成我们的具体需求。 一、实例运行效果 先入为主,下方这个效果,就是本篇博客所涉及Demo的运行效果。...3、longPressBegin()方法的实现 下方是长按手势开始时所触发的方法,首先根据触摸的点来获取该点所在cell的IndexPath。...4、longPressChange()方法的实现 下方方法就是手指移动时所触发的方法,该方法的代码比较简单,主要是改变我们快照的坐标,让Cell的快照随着手指的移动而移动。...调用该方法时,会执行DataSource代理中更新数据源的代理方法,也就是上面DataSource代理方法中最后一个更新数据源的方法。 ?
四、分页间距的算法优化 说起分页,几乎所有iOS工程师都会说.pagingEnabled属性,又说分页间距,稍有经验的工程师都会说重写UICollectionView的layout,既创建一个UICollectionViewFlowLayout...,因为这里就是上面所说方式判断移动的触发点,显然这不够平滑。...本地图片的读取 在读取本地图片时,使用[UIImage imageNamed:]方式时系统会缓存该图片,而释放缓存的时机很微妙。...于是,组件中设置了一个 pt 的界限,当图片超过这个界限,组件会自动 异步压缩 到当前屏幕最大显示 pt 数量,当用户拖动或缩放放大图片时,组件会自动 异步裁剪 可视区域的图片,通过一张前景图片显示出来...写在后面 看到这里可能有的朋友有些蒙,这通篇都说些什么,没一句完整的代码。
property (nonatomic) UICollectionViewScrollDirection scrollDirection; // 根据滚动方向不同,header和footer的高和宽中只有一个会起作用...// 垂直滚动时section间宽度为该尺寸的高,而水平滚动时为宽度起作用, @property (nonatomic) CGSize headerReferenceSize; @property (nonatomic...layoutAttributesForDecorationViewOfKind:(NSString_)decorationViewKind atIndexPath:(NSIndexPath _)indexPath // 当边界发生改变时...首先,-(void)prepareLayout将被调用, 默认下该方法什么没做,但是在自己的子类实现中 ,一般在该方法中设定一些必要的layout的结构和初始需要的参数等。...: 2.UICollectionViewDelegate // 当指定indexPath处的item被选择时触发 - (void)collectionView:(UICollectionView *)collectionView
*)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath; 当item高亮时触发的方法 - (void)collectionView...:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath; 结束高亮状态时触发的方法...:(NSIndexPath *)indexPath; 已经选中某个item时触发的方法 - (void)collectionView:(UICollectionView *)collectionView...didSelectItemAtIndexPath:(NSIndexPath *)indexPath; 取消选中某个Item时触发的方法 - (void)collectionView:(UICollectionView...*)cell forItemAtIndexPath:(NSIndexPath *)indexPath; 已经展示某个头尾视图时触发的方法 - (void)collectionView:(UICollectionView
但是,当需要显示大量数据时,确保平滑如丝的滚动可能会非常的棘手。所以今天正好趁这个机会,和大家分享一下处理大量可滚动数据方面的个人经验。...(Cache)和获取图像,来使你的 App 具有更高的响应速度 无限滚动,无缝加载 提到列表分页,相信大家第一个想到的就是 MJRefresh,用于上拉下拉来刷新数据,当滚动数据到达底部的时候向服务器发送请求...首先,我先和大家介绍一个概念:无限滚动,无限滚动是可以让用户连续的加载内容,而无需分页。在 UI 初始化的时候 App 会加载一些初始数据,然后当用户滚动快要到达显示内容的底部时加载更多的数据。...UITableView *)tableView cancelPrefetchingForRowsAtIndexPaths:(NSArray *)indexPaths; @end 第一个函数会基于当前滚动的方向和速度对接下来的...最后 终于写完了,长舒了一口气,这篇文章的篇幅有点长,主要是我花了一点时间做调研,然后看到这个知识点想给大家讲一下,看到那个知识点也想给大家讲一下,最终引经据典(东平西凑)完成了这篇文章,希望大家能够喜欢
文字及图片可扩展输入栏,汽泡效果等聊天核心特性,分页及自动布局完善。 DLSlideView - DLSlideView对常见的顶部Tab页点击,滑动分页做了封装。...基于轻扫的方向,你可以决定执行什么样的行为,并且你可以自定义文本颜色和图片。该项目适用于教学用的抽认卡,图片查看器以及其他等。...JMRoundedCorner - UIView设置不触发离屏渲染的圆角! JMRoundedCornerSwift - swift版本:UIView设置不触发离屏渲染的圆角!...KYAnimatedPageControl - 除了滚动视图时PageControl会以动画的形式一起移动,点击目标页还可快速定位。支持两种样式:粘性小球和旋转方块。...,而是使用UICollectionView来完成所有的视图管理和实现。
ZFChart - 模仿PNChart写的一个图表库,用法简单,暂时有柱状图,线状图,饼图三种类型,后续可能会更新新的类型。...文字及图片可扩展输入栏,汽泡效果等聊天核心特性,分页及自动布局完善。 DLSlideView - DLSlideView对常见的顶部Tab页点击、滑动分页做了封装。...LxTabBarController - 改变了原生tabbar切换tab时的生硬效果,并加入滑动切换手势(有和界面上的其它手势发生冲突的风险,可根据具体项目予以关闭),swift版本。...CYLTabBarController - 低耦合集成TabBarController,最低只需传两个数组即可完成主流App框架搭建。...会自动将collection view处理完善,并将用户消息以合适美观的方式显示出来。每个iOS项目都可以自动处理。
#####集合视图的一些常见属性 初始化:UICollectionView *collectionView = [[UICollectionView alloc]initWithFrame:CGRectZero...UICollectionViewDataSource中提供的方法如下: //提供视图中节的个数,这个方法需要注意数据的行是否能与每一行有几个单元格整除,不能整除时要多加一行 - (NSInteger)numberOfSectionsInCollectionView...collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath{ return YES; } 复制代码 //选择单元格之后触发...{ } 复制代码 //取消选择单元格之后触发 - (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath...UIEdgeInsetsMake函数可以创建UIEdgeInsets结构体实例。 设置每一行之间的间距:minimumLineSpacing。
override func viewDidLoad() { super.viewDidLoad() } // sender 谁触发这个事件 就将谁传进来 @IBAction...= UIImage(named: "purple.png") } } } } 思考:汤姆猫和本案例,事件都是相同的,那么能否用一个 IBAction 完成...UIPageControl 页面指示器 一般配合 UIScrollView 分页使用。...apply(_:animatingDifferences:):当要显示或更新数据时,通过调用 NSDiffableDataSourceSnapshot 对象的 apply 方法将其提供给数据源,该方法将比较当前显示的快照...一般用于自适应大小,会根据自动布局决定元素的大小。
当值为 YES 时,手势识别器先接收 touch 事件进行手势识别,识别过程中 hit-test view 的触摸事件会先被 UIWindow hold 住,当手势识别成功时 hit-test view...的触摸事件不会调用,当手势识别失败时才开始调用 touchesBegan 函数。...当值为 NO 时,当手势识别失败时会立即调用 touchesEnded 函数。...,即会触发gesTap2。...但是根据我们的开发经验可以知道,实际的结果是手势事件不触发,自身的事件响应正常触发。那其中的原理是什么呢?它与普通的UIResponder有何不同呢?我们先看一下 Apple 官方的一些介绍。
demo.gif ReactiveCocoa简介 在iOS开发过程中,当某些事件响应的时候,需要处理某些业务逻辑,这些事件都用不同的方式来处理。...它们通常被用作可并发执行的逻辑单元的封装,或者作为事件触发的回调。...Block比传统回调函数有2点优势: 允许在调用点上下文书写执行逻辑,不用分离函数 Block可以使用local variables....代码 由于BlocksKit的使用,当我们写Delegate和Datasource时 就不用分离函数,整个逻辑都能凑在一起,比如这样定义一个collectionView: - (void)initStyle...{ UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:self.view.frame collectionViewLayout
领取专属 10元无门槛券
手把手带您无忧上云