轉(zhuǎn)載請注明出處:http://www.olinone.com/
HI,親愛讀者朋友們,又到了博客更新的時間弧关,在經(jīng)歷了大半年的沉淀,目前博客日訪問人次已突破400大關(guān)唤锉,最高峰達到2600人次世囊,非常感謝各位朋友的來訪,在以后的博客中爭取為大家?guī)砀嗟母韶浟椤8魑慌笥讶绻泻玫奈恼禄蛘哳}材都可以推薦給我茸习,有什么想了解的知識,都可以在下面跟我留言壁肋,或者@龐海礁的個人空間
在聊完幾次理論后号胚,今天給大家?guī)硪黄P(guān)于UI的文章籽慢,看標題大家已經(jīng)知道了,沒錯猫胁,就是大家所熟悉的UICollectionView箱亿。說起github上赫赫有名的卡片展示視圖iCarousel,大多數(shù)iOS開發(fā)人員或多或少都有聽過或使用過弃秆,其豐富的展示樣式經(jīng)常出現(xiàn)在某些APP的一級路徑届惋,其實,蘋果公司針對卡片樣式祭出了自己的解決方案——UICollectionView
廢話少說菠赚,先上干貨HJCarouselDemo
看完GIF展示的效果脑豹,各位是否已經(jīng)蠢蠢欲動,這不就是iCarousel視圖嘛衡查,沒錯瘩欺!但是今天我們采用UICollectionView實現(xiàn)這些效果。平常開發(fā)中拌牲,最熟悉的莫過于UICollectionViewFlowLayout俱饿,其實UICollectionViewFlowLayout相當于蘋果提前定義的一個特殊UICollectionViewLayout。
先看看UICollectionViewLayout類的官方文檔(好吧塌忽,原諒我半天打不開蘋果網(wǎng)址拍埠,最近敏感期,各種和諧)土居,還是直接看代碼吧枣购,總之,自定義UICollectionViewLayout擦耀,必須實現(xiàn)以下幾個函數(shù)
collectionViewContentSize
layoutAttributesForElementsInRect:
layoutAttributesForItemAtIndexPath:
layoutAttributesForSupplementaryViewOfKind:atIndexPath:(if your layout supports supplementary views)
layoutAttributesForDecorationViewOfKind:atIndexPath:(if your layout supports decoration views)
shouldInvalidateLayoutForBoundsChange:
看函數(shù)名就可以知道各個函數(shù)實現(xiàn)的功能:第一個定位View的contentSize棉圈,第二個函數(shù)定義屏幕展示的范圍和數(shù)量,第三個定義cell的布局埂奈,第四個和第五個是可選項迄损,定義SupplementaryView以及DecorationView的布局定躏,最后一個定義是否重新布局
UICollectionViewLayout的精髓在于你可以定義每個cell的UICollectionViewLayoutAttributes屬性账磺,包括
@property(nonatomic)CGRectframe;
@property(nonatomic)CGPointcenter;
@property(nonatomic)CGSizesize;
@property(nonatomic)CATransform3Dtransform3D;
@property(nonatomic)CGRectboundsNS_AVAILABLE_IOS(7_0);
@property(nonatomic)CGAffineTransformtransformNS_AVAILABLE_IOS(7_0);
@property(nonatomic)CGFloatalpha;
@property(nonatomic)NSIntegerzIndex;// default is 0
通過定義transform3D屬性可以實現(xiàn)視圖的旋轉(zhuǎn)、放大以及透視等效果痊远,具體實現(xiàn)參考HJCarouselDemo
在這里格外需要強調(diào)的一點垮抗,那就是page屬性,當滑動停止時碧聪,希望UICollectionView滑動到卡片的中心冒版,而不是任意位置
UICollectionViewLayout定義函數(shù)
- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity
其中 ,proposedContentOffset為系統(tǒng)期望滑動到的位置逞姿,velocity為加速度辞嗡,你可以通過這兩個參數(shù)以及當前所在的位置計算出你希望它滑動到的位置捆等,具體算法根據(jù)需求的不同來實現(xiàn)
有用過我們天天動聽iOS客戶端或者QQ音樂的朋友,可能都非常熟悉這個動畫效果续室,天天動聽的推薦頁面以及QQ音樂的MV界面栋烤,是不是就這樣,嘿嘿挺狰!重要的事說三遍明郭,趕快下載天天動聽客戶端,跟我們一起搖擺起來~~~
番外篇
說完View丰泊,接下來聊聊Controller薯定,談什么了?談?wù)勊鼈冎g的關(guān)系瞳购,最近業(yè)界對設(shè)計模式的話題討論比較熱烈话侄,MVC、MVVM苛败、MVP等等满葛,不知道各位在實際開發(fā)中一般使用什么樣的設(shè)計模式,有什么好的想法都可以在下面留言罢屈,下期再見嘀韧!