`

swift -> UICollectionView 网格布局(九宫格) 可 移动,删除

 
阅读更多

 

 

import UIKit

var itemWh:CGFloat = 0,itemHt:CGFloat = 75;

class ViewController:UIViewController,UICollectionViewDelegate,UICollectionViewDataSource{
    
    var data:[String] = [String]();
    
    let cellName:String = "MyCell";
    var myCollection : UICollectionView!
    
    var screenWh:CGFloat = 0;
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor.white
        //
        screenWh = self.view.frame.width;
        //每行3个
        itemWh = screenWh/3
        
        data = [
            "a","b","c","d","e","f","g"
        ];
        
        //
        let layout = UICollectionViewFlowLayout()
        layout.itemSize = CGSize(width:itemWh,height:itemHt)
        //列间距,行间距,偏移
        layout.minimumInteritemSpacing = 0
        layout.minimumLineSpacing = 0
        layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0)
        
        myCollection = UICollectionView.init(frame: self.view.frame, collectionViewLayout: layout)
        myCollection.register(MyCell.self, forCellWithReuseIdentifier: cellName)
        myCollection.backgroundColor = UIColor.white
        myCollection.delegate = self
        myCollection.dataSource = self
        self.view.addSubview(myCollection)
        
        //添加拖动手势
        let gesture = UILongPressGestureRecognizer(target: self, action: #selector(viewCustom(_ :)))
        myCollection.addGestureRecognizer(gesture)
        
    }
    func viewCustom(_ longPress:UILongPressGestureRecognizer){
        let point:CGPoint = longPress.location(in: longPress.view)
        let indexPath = self.myCollection?.indexPathForItem(at: point)
        if(longPress.state == .began &&  indexPath == nil){return;}
        switch longPress.state {
        case .began:
            self.myCollection?.beginInteractiveMovementForItem(at: indexPath!)
            break
        case .changed:
            self.myCollection?.updateInteractiveMovementTargetPosition(point)
            break
        case .ended:
            self.myCollection?.endInteractiveMovement()
            break
        default:
            self.myCollection?.cancelInteractiveMovement()
            break
        }
        
    }
    
    
    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 1;
    }
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return data.count
    }
    //item 可以移动
    func collectionView(_ collectionView: UICollectionView, canMoveItemAt indexPath: IndexPath) -> Bool {
        return true;
    }
    //item 拖动结束时触发
    func collectionView(_ collectionView: UICollectionView, moveItemAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
        
        let sourceIndex = data[sourceIndexPath.row];
        data.remove(at: sourceIndexPath.row)
        data.insert(sourceIndex, at: destinationIndexPath.row)
        //myCollection.reloadData()
        print(data)
    }
    //点击执行删除
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        data.remove(at: indexPath.row)
        myCollection.deleteItems(at: [indexPath])
        print(data)
    }
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cells = myCollection.dequeueReusableCell(withReuseIdentifier: cellName, for: indexPath) as! MyCell
        cells.logo.image = #imageLiteral(resourceName: "a0")
        cells.title.text = data[indexPath.row]
        return cells
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    
}

class MyCell:UICollectionViewCell{
    var logo:UIImageView!
    var title:UILabel!
    override init(frame: CGRect) {
        super.init(frame: frame);
        
        let imgWidth:CGFloat = 50;
        
        logo = UIImageView(frame: CGRect(x: (itemWh-imgWidth)/2, y: 5, width: imgWidth, height: imgWidth));
        logo.clipsToBounds = true
        logo.layer.cornerRadius = 2;
        logo.contentMode = .scaleAspectFill;
        title = UILabel(frame: CGRect(x: (itemWh-imgWidth)/2, y: 5+imgWidth, width: imgWidth, height: 18));
        title.textAlignment = .center
        title.font = UIFont.systemFont(ofSize: 16)
        title.textColor = UIColor.init(white: 0.3, alpha: 1)
        self.addSubview(logo)
        self.addSubview(title)
        
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

  

 

 

分享到:
评论

相关推荐

    swift-BAGridView支付宝首页九宫格布局封装

    `swift-BAGridView支付宝首页九宫格布局封装`项目就是针对这一需求,提供了一种仿支付宝首页的九宫格布局解决方案,它使用Swift语言实现,适用于快速构建具有自定义样式的网格视图。这种布局方式在许多应用中都非常...

    swift-Cell嵌套UICollectionView自动布局获取高度示例

    这个强大的控件允许我们创建复杂的、可自定义的网格布局,适用于展示各种类型的数据。在这个“swift-Cell嵌套UICollectionView自动布局获取高度示例”中,我们将深入探讨如何在UITableViewCell中嵌套一个...

    swift-UICollectionViewCell的移动和移动

    在Swift开发中,UICollectionView是一个强大的UI组件,用于展示可滚动的、网格布局的数据集合。它允许用户自定义单元格(UICollectionViewCell)以呈现各种类型的内容,并且提供了丰富的交互功能,如拖动和移动...

    swift-使用UICollectionView来完成所有的视图管理和实现

    CardsAnimationDemo - swift, 《使用 UICollectionView 实现的一个卡片动画》不是直接操作所有 UIView 和 CALayer 的 transform3D 属性来实现整个效果的,而是使用 UICollectionView 来完成所有的视图管理和实现。

    swift-由UICollectionView创建图片轮播器

    首先,UICollectionView是苹果iOS SDK中的一个强大的组件,它允许我们创建可自定义布局的、动态内容的视图。在图片轮播器的应用场景中,UICollectionView可以轻松地展示一系列图片,并实现平滑的滚动效果。 一、...

    swift-ZJFlexibleLayout-基于UICollectionView的自定义瀑布流

    Swift-ZJFlexibleLayout 是一个基于UICollectionView的开源项目,专门用于实现自定义的瀑布流布局。在iOS应用开发中,瀑布流布局(又称流式布局)是一种常见且流行的设计模式,常用于图片展示、商品列表等场景,因为...

    swift-使用UICollectionView封装的无限轮播视图使用简单提供多种属性自由设置

    UICollectionView是一种布局灵活、可自定义的视图,用于展示多组数据项,通常用于创建网格或流式布局。在这个案例中,我们将用它来展示轮播图片。 步骤1:创建UICollectionView 在Xcode中新建一个Swift项目,然后在...

    swift-简单九宫格算法与使用

    在Swift编程中,九宫格布局是一种常见的UI设计模式,尤其在移动应用中,它能够高效地展示多项内容,如应用的功能图标或者商品列表。本文将深入探讨如何使用Swift实现一个简单的九宫格算法,以及如何在实际项目中应用...

    swift-iOS平台高效转换引擎json->modelmodel->json

    WHC_Model iOS平台高效转换引擎json->model,model->json,model->Dictionary,支持模型类继承其他模型类,支持指定路径转换,不区分json的key和模型属性名称大小写,自动处理json中null。

    swift-用UICollectionView写的无限滚动轮播图支持自定义cell滚动方向等

    UICollectionView是苹果提供的一个强大的控件,它允许开发者创建自定义布局的网格视图,可以展示多行多列的数据。它与UITableView类似,但提供了更多的灵活性,可以用于构建复杂的视图,如轮播图。 在创建无限滚动...

    swift-LxGridView-利用UICollectionView模仿iOS系统桌面图标的交互

    首先,`UICollectionView`是Apple为iOS提供的一个强大的视图类,它允许开发者创建自定义布局的网格视图,如瀑布流、棋盘格等。在Swift中,UICollectionView的使用通常涉及以下几个关键部分: 1. **...

    swift-模仿支付宝九宫格解锁

    在Swift编程语言中,模仿支付宝九宫格解锁功能是一项常见的用户界面设计任务,它涉及到自定义视图、手势识别和动画效果。以下是对这个主题的详细解析: 首先,我们需要创建一个自定义视图,名为`WDDeblockView`,这...

    swift-一个SwiftUI的灵活网格布局视图

    `GridStack`提供了一个高度可定制的网格布局解决方案,允许我们在应用中灵活地组织和显示内容。 `GridStack`的关键特性包括: 1. **动态列数**:你可以根据屏幕尺寸或特定条件设置网格的列数,使其在不同设备上...

    swift-自定义iOS网格组件基于UITableView和UICollectionView构建的GridView

    UICollectionView更适合创建网格布局,因为它支持更复杂的布局策略。构建过程如下: 1. **创建CollectionViewCell**: 创建UICollectionViewCell子类,设置内部视图的布局以适应网格需求。 2. **自定义FlowLayout**:...

    swift-greedo-layout-for-ios响应式网格布局

    Swift-Greedo-Layout 是一个专为 iOS 设计的响应式网格布局库,由著名摄影社区 500px 开发并开源。这个布局库旨在解决在固定单元格高度时,如何自适应地调整单元格内容(如图片)的宽度,以确保每一行的内容都能在...

    swift-SBCollectionView仿UICollectionView的布局方式适用于少量有限的Item集合

    如同`UICollectionView`,它可以实现多种布局效果,例如流式布局、网格布局、瀑布流布局等。开发者可以通过自定义布局类来实现特定的布局策略,这在处理少量元素时特别有用,因为它可以避免`UICollectionView`的一些...

    swift-Yahoo开源的在线obj-c->swift工具

    Yahoo为了帮助开发者更方便地进行这种迁移,开源了一个在线工具——"swift-Yahoo开源的在线obj-c->swift工具"。这个工具允许开发者直接将Objective-C代码粘贴到网页中,然后自动生成对应的Swift代码。这大大简化了...

    swift 代码自定义UICollectionViewCell

    在Swift编程中,UICollectionView是一种非常强大的视图组件,它允许我们以网格布局展示多个可交互的元素。对于iOS开发者来说,尤其是初学者,理解如何自定义UICollectionViewCell是至关重要的技能。Xcode 6引入了...

    swift-UICollectionView和UITableView的声明性可测试数据源

    在Swift编程中,UICollectionView和UITableView是两种非常重要的UI组件,用于展示列表或网格视图的数据。这些视图的实现往往涉及到复杂的数据源管理,而DataSourceKit是一个致力于简化这个过程的开源库,它提供了...

    ios九宫格灵活布局

    在iOS开发中,实现一个可自定义每行方块数的九宫格布局是一项常见的需求。这通常涉及到自定义UICollectionViewFlowLayout来实现灵活的布局效果。本文将深入探讨如何利用Swift和UIKit来创建这样一个九宫格布局,并...

Global site tag (gtag.js) - Google Analytics