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

首頁 > 系統 > iOS > 正文

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

2020-07-26 02:36:02
字體:
來源:轉載
供稿:網友

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

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

產品中的一些實現效果

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

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

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

collection

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

模塊圖如下:

 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
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色综合视频一区中文字幕| 欧美国产日韩一区| 国产在线a不卡| 国产精品午夜一区二区欲梦| 136fldh精品导航福利| 97视频在线观看免费高清完整版在线观看| 亚洲男女自偷自拍图片另类| 成人黄色短视频在线观看| 亚洲国产欧美一区| 国产精品小说在线| 日韩av在线影院| 不卡av电影在线观看| 97热精品视频官网| 日本不卡高字幕在线2019| 国产在线精品自拍| 欧美高清在线观看| 91av视频在线播放| 亚洲性69xxxbbb| 欧美成年人网站| 日韩精品www| 精品成人69xx.xyz| 岛国视频午夜一区免费在线观看| 国产精品爽爽爽| 青草热久免费精品视频| 亚洲精品自拍视频| 久久精品久久久久久国产 免费| 91国自产精品中文字幕亚洲| 欧美疯狂性受xxxxx另类| 91在线视频一区| 免费97视频在线精品国自产拍| 精品国内产的精品视频在线观看| 国产亚洲人成a一在线v站| 日韩精品视频免费专区在线播放| 久久久综合av| 国语自产精品视频在线看一大j8| 成人免费淫片视频软件| 91网站免费看| 国产91精品在线播放| 亚洲精品国精品久久99热一| 国产成人精品一区二区在线| 日韩av中文字幕在线播放| 国产精品专区一| 91亚洲精品在线观看| 大伊人狠狠躁夜夜躁av一区| 欧美成人精品在线| 911国产网站尤物在线观看| 欧美成人性色生活仑片| 精品国偷自产在线视频| 欧美日韩中文在线观看| 亚洲成人av片| 精品久久久久久电影| 亚洲欧洲高清在线| 亚洲欧洲自拍偷拍| 亚洲激情视频在线| 亚洲国产精品国自产拍av秋霞| 17婷婷久久www| 91久久精品国产91性色| 欧美性感美女h网站在线观看免费| 亚洲a区在线视频| 日韩av免费在线看| 欧美一级电影免费在线观看| 久久韩国免费视频| 日本成人在线视频网址| 97视频在线观看免费| 亚洲精品国产精品乱码不99按摩| 久久韩国免费视频| 精品久久久一区| 亚洲福利视频在线| 欧美性生交大片免网| 欧美在线视频免费播放| 成人免费视频97| 日韩极品精品视频免费观看| 中文字幕亚洲欧美日韩高清| 国产精品第1页| 欧美亚洲国产日本| 日韩精品在线免费观看视频| 亚洲欧美中文日韩在线| 久久夜色精品亚洲噜噜国产mv| 国产精品丝袜一区二区三区| 国产精品九九久久久久久久| 成人性生交大片免费看视频直播| 伊人久久久久久久久久久久久| 日韩美女av在线| 亚洲成人久久久久| 日韩美女在线观看一区| 久久久久免费视频| 欧美一级大片在线观看| 久久伊人91精品综合网站| 亚洲国产天堂网精品网站| 久久久久久久国产精品视频| 黑人巨大精品欧美一区二区免费| 91在线无精精品一区二区| 亚洲人成在线观看网站高清| 久久久久久久久中文字幕| 久久精品免费播放| 美女啪啪无遮挡免费久久网站| 91美女高潮出水| 久久伊人精品天天| 久久久久免费精品国产| 亚洲午夜未满十八勿入免费观看全集| 亚洲国产欧美久久| 91精品国产99| 欧美精品videos另类日本| 亚洲电影成人av99爱色| 欧美中文字幕在线| 激情成人在线视频| 亚洲天堂av电影| 国产精品欧美一区二区三区奶水| 久久国产一区二区三区| 亚洲最大中文字幕| 亚洲福利视频网站| 欧美激情一区二区三区在线视频观看| 久久精品91久久久久久再现| 91av免费观看91av精品在线| 国产一区二区三区在线看| 精品国产一区二区三区久久狼黑人| 国产欧美日韩精品丝袜高跟鞋| 中文字幕日韩欧美在线| 国产亚洲精品久久久久久777| 久久久视频在线| 日韩av一区二区在线观看| 国产精品久久久久久五月尺| 久久综合伊人77777| 成人国产在线激情| 亚洲国产精品中文| 欧美专区福利在线| 热久久99这里有精品| 国产亚洲美女久久| 国产精品久久网| 日韩欧美精品中文字幕| 国产精品极品美女粉嫩高清在线| 久久久伊人日本| 色多多国产成人永久免费网站| 欧美日韩亚洲一区二| 国产精品高清在线观看| 欧美一区在线直播| 日韩欧美国产免费播放| 亚洲欧美综合图区| 国内精品国产三级国产在线专| 欧美www在线| 最近2019好看的中文字幕免费| 欧美成人精品在线| 久久国产精品99国产精| 国产精品美女免费视频| 精品视频在线播放免| 国产精品扒开腿爽爽爽视频| 久久国产精品久久国产精品| 中文字幕亚洲无线码a| 亚洲成人aaa| 国产成人精品日本亚洲专区61| 青青草一区二区| 91精品综合视频| 韩国视频理论视频久久| 欧美在线观看日本一区| 97视频在线观看亚洲| 中文字幕免费精品一区高清| 国产精品毛片a∨一区二区三区|国| 亚洲欧美国产精品久久久久久久| 欧美富婆性猛交| 亚洲无av在线中文字幕| 欧美激情精品久久久久久久变态| 欧美日韩国产精品一区二区三区四区| 成人444kkkk在线观看| 久久久国产成人精品|