亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

ios的collection控件的自定義布局實現與設計

2019-10-21 18:43:15
字體:
來源:轉載
供稿:網友

collection控件用來實現界面的各種自定義布局,最常用其作為橫向、豎向的布局控件。很早之前,系統對于collection的支持并不是很好。所以自己實現了支持自定義布局、自定義cell的collection控件。自定義的collection可以滿足所有的產品特殊需求及動態效果,例如在某些特殊情況下可能需要除選中cell之外的其它cell執行布局動畫等。在collection的基礎之上,我又實現了支持cell拖動、拖離窗體的tabview控件。本文主要介紹自定義collection的設計與實現,后續持續更新多tab的tabview控件。

我有幾張阿里云幸運券分享給你,用券購買或者升級阿里云相應產品會有特惠驚喜哦!把想要買的產品的幸運券都領走吧!快下手,馬上就要搶光了。

產品中的一些實現效果

ios,collection,自定義布局

mac旺旺表情面板,實現grid與橫向布局

ios,collection,自定義布局

mac千牛工作臺用作橫向布局

ios,collection,自定義布局

iOS千牛歷史登錄頁面實現當前選中cell變大并且選中cell總中最中位置校準動效的效果

collection

collection主要包括:繼承scrollview的collectionView,數據源協議collectionViewDataSource,事件響應協議collectoinViewDelegate,布局基類collectoinLayout以及展示單元collectionCellView。

模塊圖如下:

ios,collection,自定義布局

 collectionView

collection容器包含指實現collectionViewDataSource、collectoinViewDelegate協議的指針以及collectoinLayout成員,同時維護collectoinCellView的控件重用。

@interface WWCollectionView : NSScrollView// 布局對象@property (retain) WWCollectionViewLayout *layout;// 數據源@property (weak) id dataSource;// 事件響應@property (weak) id delegate;// 重加載數據(void)reloadData;// 重排布(void)invalidateLayout;// 取消返回選中(void)unSelectedAll;// 注冊重用對象(void)registerClass:(Class)cellClass forCellWithReuseIdentifier:(NSString *)identifier;// 對象重用(id)dequeueReusableCellWithReuseIdentifier:(NSString )identifier forIndexPath:(NSIndexPath )indexPath;// 設置選中對象(void)selectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated;// 當前選中對象(NSIndexPath *)selectedItem;// 重加載indexPath item(void)reloadItemsAtIndexPath:(NSIndexPath *)indexPath;// 插入(void)insertItemsAtIndexPath:(NSIndexPath *)indexPath withAnimate:(BOOL)animate;// 刪除(void)deleteItemsAtIndexPath:(NSIndexPath *)indexPath withAnimate:(BOOL)animate;// 重新排列(void)relayoutWithAnimation:(BOOL)animated completion:(void (^)(BOOL finished))completion;// 滾動到aPoint(void)scrollToPoint:(NSPoint)aPoint withAnimate:(BOOL)animate;@end

collectionViewDataSource

collection展示的數據源,由宿主實現。

@protocol WWCollectionViewDataSource // 返回indexPath下標的cell(WWCollectionCellView )collectView:(WWCollectionView )collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;// 總cell個數(NSInteger)numberOfItemInCollectionView:(WWCollectionView *)collectionView;// cell的數據(id)collectionView:(WWCollectionView )colletionView objectValueAtIndexPath:(NSIndexPath )indexPath;@end

collectoinViewDelegate

collection事件的回調響應,由宿主實現。

@protocol WWCollectionViewDelegate // indexPath元素被選中(void)collectionView:(WWCollectionView )collectionView didSelectItemAtIndexPath:(NSIndexPath )indexPath;// 是否支持選中(BOOL)collectionView:(WWCollectionView )collectionView shouldSelectItemsAtIndexPaths:(NSIndexPath )indexPath;@end

collectoinLayout

collectionCellView的布局方案。

@interface WWCollectionViewLayout : NSObject// 布局基類@property (weak) WWCollectionView *collectionView;// 每個cell元素大小@property (assign) NSSize itemSize;// edgeInsets@property (assign) NSEdgeInsets edgeInsets;// scrollview使用,表示整個畫布大小@property (assign) NSSize viewContentSize;(instancetype)initWithCollectionView:(WWCollectionView *)collectionView;(void)invalidateLayout;// 返回index的cell大小(NSRect)frameForIndexPath:(NSIndexPath *)index total:(NSInteger)total;(NSSize)collectionViewContentSize;@end// 橫向布局控件@interface WWFlowCollectionViewLayout : WWCollectionViewLayout@property (assign) CGFloat headMargin;@property (assign) CGFloat tailMargin;@end// grid布局控件@interface WWGridCollectionViewLayout : WWCollectionViewLayout// 每行多少個@property (assign) NSInteger numberPerRow;@property (assign) CGFloat headMargin;@property (assign) CGFloat tailMargin;@end
@implementation WWFlowCollectionViewLayout
(void)invalidateLayout {NSInteger cellCount = [self.collectionView.dataSource numberOfItemInCollectionView:self.collectionView];CGRect bounds = self.collectionView.bounds;// 畫布寬度CGFloat width = _headMargin + _tailMargin + (cellCount - 1) (self.edgeInsets.left + self.edgeInsets.right) + self.itemSize.width cellCount;if (width < bounds.size.width) {width = bounds.size.width;}self.viewContentSize = NSMakeSize(width, bounds.size.height);[super invalidateLayout];}(NSRect)frameForIndexPath:(NSIndexPath *)index total:(NSInteger)total {CGFloat leftPos = self.headMargin + [index indexAtPosition:0] * (self.itemSize.width + self.edgeInsets.left + self.edgeInsets.right);// 返回cell的rectreturn NSMakeRect(leftPos, self.edgeInsets.top, self.itemSize.width, self.itemSize.height);}@end

collectoinCellView

collection展示的cell控件。

@interface WWCollectionCellView : NSView// 當前cell被選中@property (nonatomic, assign) BOOL selected;// 數據@property (nonatomic, retain) id dataValue;// 使用前重置展示效果(void)reset;@end


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美午夜精品久久久久久浪潮| 中文字幕亚洲欧美日韩高清| 91高清免费视频| 日韩影视在线观看| 久久亚洲精品毛片| 日韩美女视频免费看| 欧美精品在线播放| 欧美孕妇孕交黑巨大网站| 中文日韩在线视频| 日韩av电影国产| 91人人爽人人爽人人精88v| 91精品视频免费| 国产精品吹潮在线观看| 国产精品xxxxx| 国产精品露脸av在线| 成人黄在线观看| 欧美成年人视频网站欧美| 亚洲国产成人精品一区二区| 久久99精品久久久久久噜噜| 亚洲男人天堂2024| 91久久精品国产91性色| 欧美xxxx14xxxxx性爽| 亚洲国产精品大全| 亚洲一区二区三区sesese| 亚洲欧美精品中文字幕在线| 国产在线观看91精品一区| 国模吧一区二区| 国产精品极品美女粉嫩高清在线| 欧美日韩久久久久| 成人久久18免费网站图片| 日韩激情片免费| 午夜精品视频在线| 亚洲一二三在线| 欧美成人精品三级在线观看| 成人在线视频福利| 久久亚洲私人国产精品va| 欧美大学生性色视频| 少妇高潮 亚洲精品| 成人欧美在线视频| 精品偷拍一区二区三区在线看| 91精品国产高清自在线| 最新亚洲国产精品| 亚洲第五色综合网| 91久久精品在线| 欧美一级在线亚洲天堂| 国产成人一区二区| 亚洲精品综合久久中文字幕| 黑人精品xxx一区一二区| 久久久国产精彩视频美女艺术照福利| 亚洲精品成人av| 日韩在线观看精品| 红桃视频成人在线观看| 黑人巨大精品欧美一区二区一视频| 国产精品www色诱视频| 久久久精品亚洲| 国内精品伊人久久| 亚洲黄色成人网| 成人黄色生活片| 精品国产一区av| 久久精品亚洲一区| 6080yy精品一区二区三区| 亚洲第一精品福利| 91av免费观看91av精品在线| 精品国内产的精品视频在线观看| 亚洲电影免费观看高清完整版在线观看| 91产国在线观看动作片喷水| 91网在线免费观看| 热99精品只有里视频精品| 成人精品视频99在线观看免费| 成人啪啪免费看| 久久久久www| 欧美精品在线观看91| 亚洲成人黄色网址| 成人福利视频在线观看| 精品国产一区久久久| 亚洲激情成人网| 日韩在线观看免费全集电视剧网站| 日韩在线观看免费网站| 91成人精品网站| 中文字幕成人在线| 亚洲美腿欧美激情另类| 色综合伊人色综合网站| 一区二区日韩精品| 庆余年2免费日韩剧观看大牛| 欧美一乱一性一交一视频| 国产成人avxxxxx在线看| 国产精品影院在线观看| 欧美三级免费观看| 久久久久久久久国产精品| 大伊人狠狠躁夜夜躁av一区| 亚洲精品xxx| 亚洲福利在线观看| 欧美电影免费观看| 欧美猛少妇色xxxxx| 在线播放日韩欧美| 最近2019年好看中文字幕视频| 色中色综合影院手机版在线观看| 中文字幕在线国产精品| 7777精品久久久久久| 欧美国产日本在线| 国产日韩中文字幕在线| 久久久视频免费观看| 欧美www视频在线观看| 最近2019年好看中文字幕视频| 国产精品久久久久久久久久新婚| 91成人天堂久久成人| 国产精品久久久久久久7电影| 亚洲一区免费网站| 2019亚洲日韩新视频| 最近的2019中文字幕免费一页| 国产精品日韩欧美大师| 国产不卡av在线免费观看| 欧美成人激情在线| 欧美日韩国产中文字幕| 午夜精品一区二区三区视频免费看| 精品国产一区二区三区久久狼黑人| 91久久精品美女高潮| 国产精品va在线播放| 国产一区私人高清影院| 亚洲综合小说区| 国产亚洲视频中文字幕视频| 色妞一区二区三区| 欧美日韩国产丝袜另类| 国产精品99导航| 亚洲精品之草原avav久久| 亚洲国产日韩精品在线| 51精品国产黑色丝袜高跟鞋| 日韩美女在线播放| 色综合男人天堂| 成人亚洲激情网| 4438全国成人免费| 久久精品成人欧美大片| 亚洲第一区第二区| 国产精品91一区| 在线国产精品播放| 亚洲第一精品夜夜躁人人爽| 色综合老司机第九色激情| 欧美日韩性视频| 国产精品久久久久久亚洲影视| 色青青草原桃花久久综合| 亚洲欧美日韩第一区| 国产精品自产拍在线观看| 78色国产精品| 欧美专区中文字幕| 91av在线看| 日韩一区二区三区在线播放| 亚洲伊人一本大道中文字幕| 在线精品视频视频中文字幕| 国产在线98福利播放视频| 亚洲精品美女免费| 国产精品久久久一区| 黑人极品videos精品欧美裸| 欧洲亚洲免费在线| 亚洲第一天堂无码专区| 97国产精品视频| 久久久久九九九九| 国产69精品99久久久久久宅男| 欧美wwwwww| 欧美成人免费全部观看天天性色| 欧美日韩国产丝袜美女| 亚洲精选中文字幕| 欧美成人免费大片| 色琪琪综合男人的天堂aⅴ视频| 欧洲精品久久久|