iOS自定義collection view的page size(width/height)分頁效果

前言

想必大家工作中或多或少會遇到下圖樣式的UI需求吧
錄屏效果

像這種cell長度不固定,并且還能實現的分頁效果UI還是很常見的

實現

我們這里實現主要采用collection view,實現的方式是自定義一個UICollectionViewFlowLayout的子類,在這個類里對cell布局進行排列

  • 當出現page size小于collection view的size的時候,可以使用ZLCollectionFreePageLayout一下子就實現分頁效果
  • 并且不需要設置屬性collectionView.isPagingEnabled = true,只要設置了layout為ZLCollectionFreePageLayout,就可以自動實現這種效果

主要代碼如下:

open override func targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint, withScrollingVelocity velocity: CGPoint) -> CGPoint {guard let collectionView = collectionView else {return super.targetContentOffset(forProposedContentOffset: proposedContentOffset, withScrollingVelocity: velocity)}var pWOrH: CGFloat = 0var contentOffsetXOrY: CGFloat = 0var collectionViewContentWOrH: CGFloat = 0var velocityXOrY: CGFloat = 0if scrollDirection == .horizontal {pWOrH = (pageWOrH == 0 ? collectionView.frame.width : pageWOrH) + minimumLineSpacingcontentOffsetXOrY = collectionView.contentOffset.xcollectionViewContentWOrH = collectionViewContentSize.widthvelocityXOrY = velocity.x} else {pWOrH = (pageWOrH == 0 ? collectionView.frame.height : pageWOrH) + minimumInteritemSpacingcontentOffsetXOrY = collectionView.contentOffset.ycollectionViewContentWOrH = collectionViewContentSize.heightvelocityXOrY = velocity.y}let originalPage = contentOffsetXOrY / pWOrHvar nextPage = (velocityXOrY > 0) ? ceil(originalPage) : floor(originalPage)if (nextPage + 1.0) * pWOrH > collectionViewContentWOrH { nextPage -= 1.0 }let currentPage = (velocityXOrY > 0) ? floor(originalPage) : ceil(originalPage)let pannedLessThanOnePage = abs(1 + currentPage - originalPage) > 0.5let flicked = abs(velocityXOrY) > 0.01var newProposedContentOffset = proposedContentOffsetif !(pannedLessThanOnePage && flicked) {nextPage = round(originalPage)}newProposedContentOffset.x = nextPage * pWOrHreturn newProposedContentOffset}
  • 在使用的時候,只需要將collection.collectionViewLayout的屬性設置為我們自定義的layout對象,具體代碼如下面的示例代碼:
private lazy var collectionView: UICollectionView = {// 實例化一個ZLCollectionLeftLayout對象let defaultLayout = ZLCollectionFreePageLayout()// 自定義page width或者page heightdefaultLayout.pageWOrH = 200.0defaultLayout.minimumLineSpacing = 10.0defaultLayout.minimumInteritemSpacing = 10.0defaultLayout.scrollDirection = .verticaldefaultLayout.sectionInset = UIEdgeInsets(top: 10.0, left: 10.0, bottom: 10.0, right: 10.0)// 設置collection view的layout為ZLCollectionFreePageLayoutlet collectionView = UICollectionView(frame: .zero, collectionViewLayout: defaultLayout)collectionView.showsVerticalScrollIndicator = falsereturn collectionView
}()
  • 然后就會自動實現分頁效果

  • 并且不需要設置屬性collectionView.isPagingEnabled = true

開源代碼地址

代碼開源到github上了,可以直接拿來使用

開源代碼地址

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74107.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74107.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74107.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java高頻面試之并發編程-01

hello啊,各位觀眾姥爺們!!!本baby今天來報道了!哈哈哈哈哈嗝🐶 面試官:并行跟并發有什么區別? 并發 vs 并行:核心區別與場景 1. 定義對比 維度并發(Concu…

從零開始學Rust:所有權(Ownership)機制精要

文章目錄 第四章:Ownership 所有權核心概念關鍵機制引用與借用(Reference & Borrowing)懸垂引用問題錯誤示例分析解決方案引用安全規則 切片(Slice)內存安全保證 第四章:Ownership 所有權 Ownership i…

一旦懂得,有趣得緊1:詞根tempt-(嘗試)的兩種解法

詞根tempt-嘗試 tempt vt.引誘;誘惑;慫恿;利誘;勸誘;鼓動 temptation n.引誘;誘惑 // tempt v.引誘 -ation 名詞后綴 attempt v.&n.嘗試,試圖 // at- 加強 tempt 嘗試contempt n.蔑視&am…

召喚數學精靈

1.召喚數學精靈 - 藍橋云課 問題描述 數學家們發現了兩種用于召喚強大的數學精靈的儀式,這兩種儀式分別被稱為累加法儀式 A(n) 和累乘法儀式 B(n)。 累加法儀式 A(n) 是將從1到 n 的所有數字進行累加求和,即: A(n)12?n 累乘法儀式 B(n) …

C語言實現查表8位SAE J1850 CRC

背景: 在做霍爾采集電流的時候,CSSV1500N 系列電流傳感器通過can數據輸出的報文需要做crc校驗,嵌入式常用查表的方式,所以就問了下deepseek怎么算這個CRC. 以下是使用 查表法(Lookup Table) 在C語言中高效…

【UE5.3.2】初學1:適合初學者的入門路線圖和建議

3D人物的動作制作 大神分析:3D人物的動作制作通常可以分為以下幾個步驟: 角色綁定(Rigging):將3D人物模型綁定到一個骨骼結構上,使得模型能夠進行動畫控制。 動畫制作(Animation):通過控制骨骼結構,制作出人物的各種動作,例如走路、跳躍、打斗等。 動畫編輯(Ani…

mapreduce的工作原理

MapReduce 是 Hadoop 中實現分布式并行計算的核心框架,其工作原理基于“分而治之”的思想,將大規模數據處理任務分解為 Map(映射) 和 Reduce(歸約) 兩個階段。 一、MapReduce 核心流程 1. Input 階段 - 輸…

換季推廣不好做?DeepBI用一鍵托管的方式,讓廣告投放跑得快、準、穩

每年換季,尤其是春夏、秋冬交替的節點,都是電商平臺上各類季節性商品扎堆上新的高峰期。無論是服飾鞋包、家居戶外,還是母嬰用品、美妝護膚,許多商品都有著強烈的“時間窗口效應”——一旦錯過了熱賣期,流量下滑迅速&a…

Qt5.14.2+Cmake使用mingw64位編譯opencv4.5成功圖文教程

? 一、下載安裝相關編譯環境軟件 1.1 Python3.8:安裝路徑:C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32 安裝包:python3.8.exe 1.2 QT5.14.2:安裝路徑:C:\Qt\Qt5.14.2 1.3 opencv4.5:解壓路徑D:\o…

OpenBMC:BmcWeb 處理http請求3 字典樹查找節點

OpenBMC:BmcWeb 處理http請求2 查找路由對象-CSDN博客 findRouteByPerMethod實際上是調用了perMethod.trie.find(url);來查找路由對象的 class Trie {struct FindResult{unsigned ruleIndex;std::vector<std::string> params;};FindResult findHelper(const std::string…

Openssl自簽證書相關知識

1.前提 檢查是否已安裝 openssl $ which openssl /usr/bin/openssl 2.建立CA授權中心 2.1.生成ca私鑰(ca-prikey.pem) 初始化 OpenSSL 證書頒發機構(CA)的序列號文件 在生成證書時,ca.srl 的初始序列號需正確初始化(如 01),否則可能導致證書沖突 這會將 01 顯示在屏幕…

K個一組翻轉鏈表--囊括半數鏈表題的思想

K 個一組翻轉鏈表 這道算法題就是鏈表多個算法思想的結合&#xff0c;解決這一道leetcodehot100的鏈表題至少能做一半了 大概有一下幾個點 1.鏈表定位 2.鏈表翻轉 3.哨兵節點 4.鏈表合并 看看題目 給你鏈表的頭節點 head &#xff0c;每 k 個節點一組進行翻轉&#xff…

Flutter敏感詞過濾實戰:基于AC自動機的高效解決方案

Flutter敏感詞過濾實戰&#xff1a;基于AC自動機的高效解決方案 在社交、直播、論壇等UGC場景中&#xff0c;敏感詞過濾是保障平臺安全的關鍵防線。本文將深入解析基于AC自動機的Flutter敏感詞過濾實現方案&#xff0c;通過原理剖析實戰代碼性能對比&#xff0c;帶你打造毫秒級…

UML中的用例圖和類圖

在UML&#xff08;統一建模語言&#xff09;中&#xff0c;**用例圖&#xff08;Use Case Diagram&#xff09;和類圖&#xff08;Class Diagram&#xff09;**是兩種最常用的圖表類型&#xff0c;分別用于描述系統的高層功能和靜態結構。以下是它們的核心概念、用途及區別&…

深入解析:HarmonyOS Design設計語言的核心理念

深入解析&#xff1a;HarmonyOS Design設計語言的核心理念 在當今數字化迅速發展的時代&#xff0c;用戶對操作系統的體驗要求越來越高。華為的HarmonyOS&#xff08;鴻蒙操作系統&#xff09;應運而生&#xff0c;旨在為用戶提供全場景、全設備的智慧體驗。其背后的設計語言—…

Vue 類與樣式

數據綁定的一個常見需求場景是操縱元素的 CSS class 列表和內聯樣式。因為 class 和 style 都是 attribute&#xff0c;我們可以和其他 attribute 一樣使用 v-bind 將它們和動態的字符串綁定。但是&#xff0c;在處理比較復雜的綁定時&#xff0c;通過拼接生成字符串是麻煩且易…

Android 中獲取顏色資源

在 Android 開發中&#xff0c;資源&#xff08;如字符串、顏色等&#xff09;通常存儲在 res 文件夾中&#xff0c;并通過資源 ID 進行訪問。資源 ID 是一個整型值&#xff0c;用于唯一標識資源&#xff0c;若需要將資源轉換為整型值&#xff0c;通常是指獲取資源 ID 或從資源…

Linux中的文件尋址

Linux的層級結構 在Linux中一切皆文件 其中 要注意在命令行中看實際選擇寫哪一種路徑 相對路徑 絕對路徑名稱的簡寫&#xff0c;省略了用戶當前所在的系統位置此名稱只有在管理當前所在系統目錄中子文件時才能使用系統中不以/開有的文件名稱都為相對路徑在程序操作時會自動…

洛谷: P1825 [USACO11OPEN] Corn Maze S

原題鏈接:P1825 [USACO11OPEN] Corn Maze S - 洛谷 題目描述 This past fall, Farmer John took the cows to visit a corn maze. But this wasnt just any corn maze: it featured several gravity-powered teleporter slides, which cause cows to teleport instantly from…

探秘DeepSeek:開源AI領域的創新先鋒

一、引言 在人工智能迅猛發展的當下&#xff0c;眾多先進的模型如雨后春筍般涌現&#xff0c;而 DeepSeek 無疑是其中備受矚目的一顆新星。它以獨特的技術優勢和廣泛的應用場景&#xff0c;在 AI 領域嶄露頭角。 二、DeepSeek 的誕生與背景 DeepSeek 由來自廣東省的中國企業…