iOS開發 橫向流水布局實現

2021-09-07 12:03:56 字數 4034 閱讀 2019

ios開發--橫向流水布局實現

效果展示圖;

原始碼:1//  photocell.h

2//  自定義流水布局

3//

6// 7

8#import 9

10@inte***cephotocell : uicollectionviewcell11

12@property(nonatomic, strong) uiimage *image;13

14@end

1516***************=兩個檔案的分水嶺***************===

17//

18//  photocell.m

19//  自定義流水布局

20//

21//  created by xmg on 16/1/15.

23//

2425

2627#import "photocell.h"

2829@inte***cephotocell ()

30@property(weak, nonatomic) iboutletuiimageview *imageview;

31@end

3233@implementationphotocell34

35- (void)awakefromnib

3839- (void)setimage:(uiimage *)image40

46 47@end

1 //

2 // photolayout.h

3 // 自定義流水布局

4 //

5 // created by xmg on 16/1/15.

7 //

8 9 #import 10

11 @inte***ce photolayout : uicollectionviewflowlayout

12 13 @end

14 15

16 **********====兩個檔案的分水嶺***************=

17 18 //

19 // photolayout.m

20 // 自定義流水布局

21 //

22 // created by xmg on 16/1/15.

24 //

25 26 #import "photolayout.h"

27 #define xmgscreenw [uiscreen mainscreen].bounds.size.width

28 @implementation photolayout

29 30 // 複雜效果: 分析 ->

31 // cell離中心點距離越近(delta越小),就越大,越遠,就越小

32 // 距離中心點

33 // 知道哪些cell需要縮放:顯示出來的cell才需要進行布局

34 35

36 37 // 給定乙個區域,就返回這個區域內所有cell布局

38 - (nullable nsarray<__kindof uicollectionviewlayoutattributes> *)layoutattributesforelementsinrect:(cgrect)rect

39 57

58 return attributes;

59 }

60 61 // invalidate:重新整理

62 // 是否允許在拖動的時候重新整理布局

63 // 謹慎使用,yes:只要一滾動就會布局

64 - (bool)shouldinvalidatelayoutforboundschange:(cgrect)newbounds

65 68

69 // 確定最終顯示位置

70 // 什麼時候呼叫:手動拖動uicollectionview,當手指離開的時候,就會呼叫

71 // 作用:返回uicollectionview最終的偏移量

72 // proposedcontentoffset:最終的偏移量

73 - (cgpoint)targetcontentoffsetforproposedcontentoffset:(cgpoint)proposedcontentoffset withscrollin**elocity:(cgpoint)velocity

74 92 }

93

94 proposedcontentoffset.x += mindelta;

95

96 if (proposedcontentoffset.x < 0)

99 100 return proposedcontentoffset;

101 }

102

103 @end

最後的關鍵**:

1 //

2 // viewcontroller.m

3 // 自定義流水布局

4 //

5 // created by xmg on 16/1/15.

7 //

8 9 #import "viewcontroller.h"

10 #import "photocell.h"

11 #import "photolayout.h"

12 13 /*

14 // a , b , c a = b + c

15 // int d = (2,3,5);

16

17 // 高聚合,低耦合

18 int a = ();

24 */

25 26 /*

27 uicollectionview注意點:

28 1.初始化必須要傳入布局,(流水布局:九宮格布局)

29 2.uicollectionviewcell必須要註冊

30 3.必須自定義cell

31 */

32 33

34 #define xmgscreenw [uiscreen mainscreen].bounds.size.width

35 static nsstring * const id = @"cell";

36 @inte***ce viewcontroller ()37

38 @end

39 40 @implementation viewcontroller

41 42 // 思路:**瀏覽布局:流水布局,在拖到的時候,在原來基礎上重新計算下布局 -> 在原來功能上再新增功能,自定義流水布局

43 - (void)viewdidload );

60

61 // 建立uicollectionview:預設為黑色

62 uicollectionview *collectionview = ();

74

75 // 註冊cell

76 [collectionview registernib:[uinib nibwithnibname:nsstringfromclass([photocell class]) bundle:nil] forcellwithreuseidentifier:id];

77 }

78 79

80 #pragma mark -uicollectionviewdatasource

81 // 返回有多少個cell

82 - (nsinteger)collectionview:(uicollectionview *)collectionview numberofitemsinsection:(nsinteger)section

83 86

87 // 返回每個cell長什麼樣

88 - (uicollectionviewcell *)collectionview:(uicollectionview *)collectionview cellforitematindexpath:(nsindexpath *)indexpath

89 99

100 @end

IOS開發 橫向流水布局實現

viewcontroller.m 自定義流水布局 created by xmg on 16 1 15.import viewcontroller.h import photocell.h import photolayout.h a b c a b c int d 2,3,5 高聚合,低耦合 int...

程式開發應從橫向實現(而不是縱向實現)

也許有些人早就是這樣做了,也許有些人還在和我一樣,也許有些人認為這樣挺好的,總之我認為這是我要改進的地方。程式開發應首先統觀全域性,然後再逐個深入。舉例 要實現某一功能,在開發過程中,往往需要將功能分成多個模組,每個模組下有眾多子模組,再拆分成多個相互配合函式,然後是子函式,巢狀函式等等。這個設計過...

IOS專案開發布局三

ios專案開發布局三 上次講到專案資料夾的模版,下面我開始以側邊欄為例,繼續講框架。首先看檔案的結構布局圖如下 1.在libs的slideviewcontroller資料夾下新增側邊欄第三方檔案 3.在constants檔案中定義一些全域性的巨集 4.demviewcontroller.h和demv...