使用uicollectionview 实现单元格滑动吸附效果

项目中遇到的需求,需要作出每个单元格必须完全显示.

使用uicolectionview可以实现:

collectionview的布局全部由UICollectionViewFlowLayout控制.

UICollectionViewFlowLayout的一个方法控制滑动结束单元格的停止位置:

-(CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity

所以必须重写这个方法:

.h文件

#import <UIKit/UIKit.h>

@interface Customlayout : UICollectionViewFlowLayout

@end

.m文件

#import "Customlayout.h"

@implementation Customlayout

-(CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity

{

//1.计算scrollview最后停留的范围

CGRect lastRect ;

lastRect.origin = proposedContentOffset;

lastRect.size = self.collectionView.frame.size;

//2.取出这个范围内的所有属性

NSArray *array = [self layoutAttributesForElementsInRect:lastRect];

//起始的x值,也即默认情况下要停下来的x值

CGFloat startX = proposedContentOffset.x;

//3.遍历所有的属性

CGFloat adjustOffsetX = MAXFLOAT;

for (UICollectionViewLayoutAttributes *attrs in array) {

CGFloat attrsX = CGRectGetMinX(attrs.frame); //单元格x

CGFloat attrsW = CGRectGetWidth(attrs.frame) ; //单元格宽度

if (startX - attrsX  < attrsW/2) { //小于一半

adjustOffsetX = -(startX - attrsX);

}else{

adjustOffsetX = attrsW - (startX - attrsX);

}

break ;//只循环数组中第一个元素即可,所以直接break了

}

return CGPointMake(proposedContentOffset.x + adjustOffsetX, proposedContentOffset.y);

}

@end

时间: 2024-11-01 11:56:01

使用uicollectionview 实现单元格滑动吸附效果的相关文章

UITableView&amp;UICollectionView设置单元格的默认选中状态

1. 场景需求 一个表格视图(或者宫格视图)中,当一个单元格被选中时设置彩色样式,选中其它单元格时设置灰色样式. 2. 一个思路 通过实现选中和非选择的代理,以在适当的时机进行UI更新操作. 3. UITableView 3.1 通过屏幕点击改变的选中状态回调给代理 //选中-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath;//非选中-(void)tableView:(

C#实现向excel中插入行列,以及设置单元格合并居中效果

插入空行: Microsoft.Office.Interop.Excel.Workbook xlsWorkbook; Microsoft.Office.Interop.Excel.Worksheet xlsSheet = xlsWorkbook.Worksheets[1]; Microsoft.Office.Interop.Excel.Range xlsRow=(Microsoft.Office.Interop.Excel.Range)xlsSheet.Rows[3,MisValue]; xls

修改TreeList单元格格式(实现类似单元格合并效果)

关键点:(1)TreeList中显示的单元格默认不显示上.下.左.右边框,显示的是TreeList自身的行横边框.列纵边框,具体对应TreeList属性中OptionView项下的ShowVertLines.ShowHorzLines两项,将其对应默认值由默认False改为True即可去除行横边框.列纵边框,然后设置怎样的单元格格式显示什么样的单元格格式: (2)在*_CustomDrawNodeCell中修改函数,而不是*_NodeCellStyle中修改,另外需要注意,前者在后者前运行,因此

MFC List Control控件添加单元格编辑和单元格下拉列表项以适用于数据库相关操作

作为现代的软件,往往是连着数据库的,而连着和用户方便地操作之间,还有着界面这道坎.MFC是Windows上比较好开发用户界面的框架,然而其自带的控件中没有对于数据库表格支持较好的控件,而使用网上提到的 DataGrid 等控件在本人的win8.1+VS2013平台上老出现找不到控件或者头文件的问题,搞的烦死人.最后想到 List Control 控件只要稍作修改,加上单元格编辑和单元格下拉列表,其实就能和数据库进行良好的对接,一百度,果然有人已经做了这件事,实在是太让人感动了!       

Oracle BIEE实现单元格内容超链接的两种方式

Oracle BIEE实现单元格超链接有两种方式: ① 定制单元格文本为HTML: ② 自定义定制单元格文本. 效果如下图所示,其中左列为方式①,右列为方式②的效果. 方式①操作步骤: 1.设置该列 列属性-数据格式 中,覆盖缺省数据格式,同时将文本视为HTML: 2.按照以下格式,拼接出定制跳转的HTML语句的字符串,并将其设置为该列的列公式. '<a href ="/web/obiee/portalPages.do?sawId=D4B9D70AC7D1AC4A3C7542C9B84A4

【POI xlsx】使用POI对xlsx的单元格样式进行设置

涉及到的样式都在代码中有说明: 1 package com.it.poiTest; 2 3 import java.io.FileNotFoundException; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 7 import org.apache.poi.hssf.util.HSSFColor; 8 import org.apache.poi.sl.usermodel.Sheet; 9 import o

[Swift通天遁地]二、表格表单-(7)电子邮件Mail:实现单元格左右滑动调出功能按钮

本文将演示对单元格进行扩展,当手指在单元格左右滑动时,弹出不同的功能菜单. Github项目:[MGSwipeTableCell] 下载该项目的源代码.文件夹[demo]->文件夹[MailAppDemoSwift]->文件夹[MailAppDemoSwift] ->双击文件[MailAppDemoSwift.xcodeproj]打开示例工程. 选择该项目中的几个文件,拖动到自己的开发项目中.按住[Shift],选择 [MGSwipeButton.h] [MGSwipeButton.m]

ExtJS4.2 Grid知识点七:显示行号、斑马线效果(奇偶行背景色不一致)、复制单元格文字、禁止点击列排序

本节主要学习ExtJS4.2 Grid显示行号.斑马线效果(奇偶行背景色不一致).复制单元格文字.禁止点击列排序.禁止列头部右侧菜单,示例图片: 在线演示  /  在线演示 主要内容如下: 显示行号 斑马线效果(奇偶行背景颜色不一致) 复制单元格问题 禁止点击列排序 禁止列头部右侧菜单 1.显示行号 在Grid中增加行号列,xtype指定为rownumberer. {header: 'NO',xtype: 'rownumberer',width: 40,sortable: false} 2.斑马

表视图展开收起 头视图滑动到顶部不动 直到该组单元格全部推上去

类似qq的分组  头视图展开后推到屏幕顶端不动直到该组的单元格全部推上去 实现方法 1.在下面创建表视图的方法里style 设置成UITableViewStylePlain [[ UITableView alloc] initWithFrame:CGRectMake(0, 100, kScreenWide, kScreenHeight - 164) style:UITableViewStylePlain]; 2.表视图的代理方法 要添加设置组的代理方法 - (NSInteger)numberOf