Colletion View 简单的备忘

UIColletionView

这篇只是做UIColletionView的常用属性、代理方法和数据源方法的备忘,之后做一些自定义布局,增加删除动画等。

UIColletionViewFlowLayout的常用属性和UIColletionView的常用属性方法

        // 创建布局类
        let layout = UICollectionViewFlowLayout()
        layout.itemSize = CGSizeMake(50.0, 50.0)
        layout.headerReferenceSize = CGSizeMake(view.frame.size.width, 100)
        layout.scrollDirection = UICollectionViewScrollDirection.Vertical
        layout.minimumLineSpacing = 50.0
        layout.minimumInteritemSpacing = (view.frame.size.width - 20 - 50 * 4) / 4
        layout.sectionInset = UIEdgeInsetsMake(10, 10, 0, 10)

        // 创建collection view
        let collectionView = UICollectionView(frame: CGRectMake(0, 20, view.frame.size.width, view.frame.size.height - 20), collectionViewLayout: layout)
        collectionView.backgroundColor = UIColor.whiteColor()
        collectionView.delegate = self
        collectionView.dataSource = self

        // 注册Cell SectionHeader SectionFooter
        collectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "Cell")
        collectionView.registerClass(UICollectionReusableView.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "SectionHeader")
        collectionView.registerClass(UICollectionReusableView.self, forSupplementaryViewOfKind: UICollectionElementKindSectionFooter, withReuseIdentifier: "SectionFooter")

        view.addSubview(collectionView)

一般简单的布局使用原生的flowlayout就行,常用属性:

  • itemSize:每个cell的尺寸。
  • headerReferenceSize:组头的尺寸。
  • footerReferenceSize:组尾的尺寸。
  • scrollDirection:滚动方向。
  • minimumLineSpacing:每一行的距离。
  • minimumInteritemSpacing:每个cell之间的距离。
  • sectionInset:组的内边距。

一般collection view的必须设置的属性和方法:

  • delegate:代理,可以监听事件。
  • dataSource:数据源,提供一些collection view要用的数据
  • registerClass(_, forCellWithReuseIdentifier:):注册Cell,实现复用机制。
  • registerClass(_, forSupplementaryViewOfKind: , withReuseIdentifier:):注册组头或组尾,也是可以复用的。

Delegate

高亮:

    // cell是否允许高亮
    func collectionView(collectionView: UICollectionView, shouldHighlightItemAtIndexPath indexPath: NSIndexPath) -> Bool {
        return true
    }

    // cell已经进入高亮状态
    func collectionView(collectionView: UICollectionView, didHighlightItemAtIndexPath indexPath: NSIndexPath) {
        print("didHighlightItemAtIndexPath")
    }

    // cell已经结束高亮状态
    func collectionView(collectionView: UICollectionView, didUnhighlightItemAtIndexPath indexPath: NSIndexPath) {
        print("didUnhighlightItemAtIndexPath")
    }

选中:

    // cell是否允许选中
    func collectionView(collectionView: UICollectionView, shouldSelectItemAtIndexPath indexPath: NSIndexPath) -> Bool {
        return true
    }

    // cell是否允许取消选中
    func collectionView(collectionView: UICollectionView, shouldDeselectItemAtIndexPath indexPath: NSIndexPath) -> Bool {
        return true
    }

    // cell被选中
    func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
        print("didSelectItemAtIndexPath")
    }

    // cell取消选中
    func collectionView(collectionView: UICollectionView, didDeselectItemAtIndexPath indexPath: NSIndexPath) {
        print("didDeselectItemAtIndexPath")
    }

显示(iOS8):

    // 即将有cell显示
    func collectionView(collectionView: UICollectionView, willDisplayCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) {
        print("willDisplayCell")
    }

    // 即将有组头或组尾显示
    func collectionView(collectionView: UICollectionView, willDisplaySupplementaryView view: UICollectionReusableView, forElementKind elementKind: String, atIndexPath indexPath: NSIndexPath) {
        print("willDisplaySupplementaryView")
    }

    // 有cell不在屏幕上显示了
    func collectionView(collectionView: UICollectionView, didEndDisplayingCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) {
        print("didEndDisplayingCell")
    }

    // 有组头或组尾不在屏幕上显示了
    func collectionView(collectionView: UICollectionView, didEndDisplayingSupplementaryView view: UICollectionReusableView, forElementOfKind elementKind: String, atIndexPath indexPath: NSIndexPath) {
        print("didEndDisplayingSupplementaryView")
    }

菜单:

    // 是否允许显示菜单
    func collectionView(collectionView: UICollectionView, shouldShowMenuForItemAtIndexPath indexPath: NSIndexPath) -> Bool {
        return true
    }

    // 允许实现那个菜单方法
    func collectionView(collectionView: UICollectionView, canPerformAction action: Selector, forItemAtIndexPath indexPath: NSIndexPath, withSender sender: AnyObject?) -> Bool {
        return true
    }

    // 菜单方法的具体实现
    func collectionView(collectionView: UICollectionView, performAction action: Selector, forItemAtIndexPath indexPath: NSIndexPath, withSender sender: AnyObject?) {

    }

重新布局 :

    // 重新布局的时候调用
    func collectionView(collectionView: UICollectionView, transitionLayoutForOldLayout fromLayout: UICollectionViewLayout, newLayout toLayout: UICollectionViewLayout) -> UICollectionViewTransitionLayout {
        print("transitionLayoutForOldLayout")
        let transitionLayout = UICollectionViewTransitionLayout(currentLayout: fromLayout, nextLayout: toLayout)
        transitionLayout.transitionProgress = 1.5
        return transitionLayout
    }

DelegateFlowLayout

    // 设置每个cell的尺寸
    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
        if indexPath.row % 2 == 0{
            return CGSizeMake(30, 30)
        } else {
            return CGSizeMake(50, 50)
        }
    }

    // 设置每一组的内边距
    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets {
        return UIEdgeInsetsMake(20, 5, 10, 5)
    }

    // 返回每一组的行距
    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat {
        return 10
    }

    // 返回每组item之间的间距
    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat {
        return 10
    }

    // 返回每一组的组尾尺寸
    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize {
        return CGSizeMake(view.frame.size.width, 80)
    }

    // 返回每一组的组头尺寸
    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
        return CGSizeMake(view.frame.size.width, 200)
    }

DataSource

    // 必须实现 返回cell个数
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 40
    }

    // 必须实现 返回每个cell 复用机制
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath)
        cell.backgroundColor = UIColor.brownColor()

        return cell
    }

    // 返回有几组
    func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
        return 2
    }

    // 返回组头或者组尾视图,同样用复用机制
    func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {
        let reusableView = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "SectionHeader", forIndexPath: indexPath)
        if kind == UICollectionElementKindSectionHeader {
            reusableView.backgroundColor = UIColor.blackColor()
        } else {
            reusableView.backgroundColor = UIColor.blueColor()
        }
        return reusableView
    }
时间: 2024-10-02 00:31:38

Colletion View 简单的备忘的相关文章

Table view 备忘

Table view 备忘 本篇会以备忘为主,主要是一些基础的代理方法和数据源方法具体的优化好点子会后续跟上. Table view的数据源方法 必须实现的数据源方法 // 返回每一行的cell,可以做缓存处理,同样也可能会造成复用问题. func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { // tableview 和 cell 都是在s

Scroll view 备忘

Stroyboard中使用ScrollView 当我们使用Storyboard开发项目时,如果要往控制器上拖入一个ScrollView并且添加约束设置滚动区域,是有特殊的规定的: 拖入一个scrollview,规定它的位置大小: 如果想要scrollview滚动的话,需要一个view作为scrollview的子视图,称之为 containerView,并且containerView的约束决定着scroll view 是否可以滚动 注意:在实际开发中,我们可能会遇到不止上下滚动(设置水平居中和高度

jdbc中对mysql数据库操作的简单封装--(仅做备忘记录)

本次使用jdbc中的mysql-connector-java-5.1.47-bin.jar的连接包,下载这个jar包放在javaee项目的WEB-INF/lib目录下,再把它作为外包jar包进入到libraries中,这样就可以使用mysql的jdbc接口了. 自己封装的代码中引入了两个自己字义的Exception:SqlSecureException.java package com.myproweb.exception; public class SqlSecureException ext

简单备忘一下Linux下的wget和curl如何使用http proxy

简单备忘一下Linux下的wget和curl如何使用http proxywget -e "http_proxy=porxyhost:port" www.baidu.comcurl -x proxyhost:port www.baidu.com 如果需要用户名密码,格式curl -x "http://user:[email protected]:port" www.baidu.com 在Linux的命令行底下,一般的程序都是使用http_proxy和ftp_proxy

Objective-C教程备忘单

终极版本的Objective-C教程备忘单帮助你进行iOS开发. 想开始创建你的第一个iOS应用程序么?那么看一下这篇很棒的教程吧:Create your first iOS 7 Hello World Application 注:这篇文章我写了三天,可能在一些必要的地方使用了编辑和说明,所以如果有任何疑问和修改建议请在下方评论. 这不是一个初学者指南,也不是关于Objective-C的详细讨论,这是关于常见的和高水平的论题的快速索引. 如果这里有些问题没有涉及到,你也可以查阅以下文章: Obj

SQL Server -- 自定义函数(学习总结,备忘)

SQL Server自定义函数,以前只在书上看过,没有动手去敲一敲,今天刚好接触到,看了几篇博文学习了下.做好备忘很重要!! (@[email protected])Y Learn from:http://www.cnblogs.com/lideng/archive/2013/04/15/3022418.html 自定义函数分为:标量值函数或表值函数两种. 标量值函数:如果 RETURNS 子句指定一种标量数据类型,则函数为标量值函数. 表值函数:如果 RETURNS 子句指定 TABLE,则函

基于Prism.Windows的UWP开发备忘

以前做UWP开发都是使用MvvmLight,主要是简单易上手,同时也写了很多MvvmLight的开发系列文章: UWP开发必备以及常用知识点总结 UWP开发之Mvvmlight实践九:基于MVVM的项目架构分享 UWP开发之Mvvmlight实践八:为什么事件注销处理要写在OnNavigatingFrom中 UWP开发之Mvvmlight实践七:如何查找设备(Mobile模拟器.实体手机.PC)中应用的Log等文件 UWP开发之Mvvmlight实践六:MissingMetadataExcept

AngularJS之备忘与诀窍

译自:<angularjs> 备忘与诀窍 目前为止,之前的章节已经覆盖了Angular所有功能结构中的大多数,包括指令,服务,控制器,资源以及其它内容.但是我们知道有时候仅仅阅读是不够的.有时候,我们并不在乎那些功能机制是如果运行的,我们仅仅想知道如何用AngularJS去做实现一个具体功能. 在这一章中,我么视图给出完整的样例代码,并且对这些样例代码仅仅给出少量的信息和解释,这些代码解决是我们在大多数Web应用中碰到的通用问题.这些代码没有具体的先后次序,你尽可以跳到你关心的小节先睹为快或者

备忘-linux文件系统结构

用apache的时候总是要进入/var/www, 用久了开始好奇这些个目录都是派什么用处的,简单整理了一下 /bin 存放二进制命令文件,这个目录下面不允许存在子目录/boot bootloader的静态文件,当然OS的文件也必须在这里/dev 设备文件,MAKEDEV命令可以创建设备/etc 特定主机的配置文件,必须是静态文件,非可执行文件: opt, X11, sgml, xml/home 用户目录 /lib 存放主要的共享库和核心模块/media 可移除媒体的挂载点: floppy, cd