翻看之前我寫過的文章,絕大多數(shù)都是基于自己所做的項目顿锰,從其中提取出一些自認為不錯的斩箫、可同大家交流分享的設(shè)計或者交互,這篇文章的產(chǎn)出同樣也是基于開頭提到的項目需求撵儿,簡而言之就是項目驅(qū)動隨筆~
一個類似于卡包的效果,由于第一次接觸開發(fā)這樣的效果狐血,對于這種效果的實現(xiàn)也是花了一天半的去調(diào)研淀歇、分析。
在網(wǎng)上檢索相關(guān)關(guān)于wallet效果匈织,發(fā)現(xiàn)這篇的效果與我們項目中的需求比較接近浪默,通過閱讀源碼發(fā)現(xiàn)他的實現(xiàn)思路是在一個scrollview上創(chuàng)建出若干個view,但是如果卡片較多缀匕,此種實現(xiàn)的方式可能會對性能產(chǎn)生一定的負面影響纳决,可能也是該作者更側(cè)重于效果的演示而提供出的一種解決方案。
既然性能上有影響乡小,那是不是可以考慮借助蘋果的緩存池的思想自己寫一套緩存機制加以使用阔加,于是乎瀏覽器又帶我來到了這里。
通讀完整篇文章满钟,也只能用“WOC”走天下了胜榔,真的很佩服這位作者,在佩服的同時也感嘆自己實在是沒有勇氣去依照此法實現(xiàn)項目需求所期望的那樣湃番。而且蘋果自己的控件也有實現(xiàn)這套緩存機制夭织,雖然不然清楚緩存的原理是否相同,但是這一塊額外的工作開銷對于項目開發(fā)階段倒是可以規(guī)避的吠撮。
于是乎想到的解決方案是cell里通過override- (void)setFrame:(CGRect)frame
來達到cell覆蓋cell的效果尊惰,之所以想到重寫此方法,也是源于之前iOS剛?cè)腴T階段在實現(xiàn)cell分割線效果時使用的解決方案,但是目前這個需求在我實踐之后得到的結(jié)論是:你在想peach弄屡!
說了半篇的廢話题禀,正文開始。
1.重疊cell的效果即是布局方式的直接反應(yīng)
2.可展開可收縮的效果也是對origin屬性的直接控制
3.一個collectionView使用多個layout也是間接的在指明各個分區(qū)特定的布局方式到底是怎樣的
關(guān)于自定義layout如果沒有接觸過的小伙伴可以參考這篇琢岩,文章中對于一些常用方法的說明都比較詳細投剥,有興趣的可以學習一下。
在我看來担孔,其實自定義layout主要還是在計算每個item在collectionView中的布局江锨,通過類UICollectionViewLayoutAttributes
記錄每個cell具體的布局信息,并存放于一個數(shù)組中糕篇。包括實現(xiàn)類似于tableView中的分區(qū)頭啄育、尾試圖,也是基于此拌消。
本文demo下載地址:https://github.com/TMMMMMS/TMSWalletLayout.git
稍微復雜一些的交互效果挑豌,可以閱讀這位作者的文章