2013-07-18 51 views
0

我想完成以下操作,我已經用UIScrollview輕鬆完成了這個任務,但最近我一直在使用UICollectionView進行實驗(我知道我對遊戲很遲鈍),並且很想知道是否按順序做我想做的事情,我必須實現自定義佈局,或者如果FlowLayout已經爲我做了這個。UICollectionViewFlowLayout實現

基本上,如果你看附件,你會發現滾動可以發生在垂直和水平方向,行都一路超過UICollectionView的高度。超過集合視圖寬度的列也會發生同樣的情況。

這可能與Flowlayout有關嗎?

Sample

+0

是的,你可以用流佈局的子類來做到這一點。 – rdelmar

回答

1

我已經這樣做了。

#define space 5 
#import "MultpleLineLayout.h" 

@implementation MultpleLineLayout { // a subclass of UICollectionViewFlowLayout 
    NSInteger itemWidth; 
    NSInteger itemHeight; 
} 

-(id)init { 
    if (self = [super init]) { 
     itemWidth = 60; 
     itemHeight = 60; 
    } 
    return self; 
} 

-(CGSize)collectionViewContentSize { 
    NSInteger xSize = [self.collectionView numberOfItemsInSection:0] * (itemWidth + space); // "space" is for spacing between cells. 
    NSInteger ySize = [self.collectionView numberOfSections] * (itemHeight + space); 
    return CGSizeMake(xSize, ySize); 
} 

- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)path { 
    UICollectionViewLayoutAttributes* attributes = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:path]; 
    attributes.size = CGSizeMake(itemWidth,itemHeight); 
    int xValue = itemWidth/2 + path.row * (itemWidth + space); 
    int yValue = itemHeight + path.section * (itemHeight + space); 
    attributes.center = CGPointMake(xValue, yValue); 
    return attributes; 
} 


-(NSArray*)layoutAttributesForElementsInRect:(CGRect)rect { 
    NSInteger minRow = (rect.origin.x > 0)? rect.origin.x/(itemWidth + space) : 0; // need to check because bounce gives negative values for x. 
    NSInteger maxRow = rect.size.width/(itemWidth + space) + minRow; 
    NSMutableArray* attributes = [NSMutableArray array]; 
    for(NSInteger i=0 ; i < self.collectionView.numberOfSections; i++) { 
     for (NSInteger j=minRow ; j < maxRow; j++) { 
      NSIndexPath* indexPath = [NSIndexPath indexPathForItem:j inSection:i]; 
      [attributes addObject:[self layoutAttributesForItemAtIndexPath:indexPath]]; 
     } 
    } 
    return attributes; 
} 

我的數據源是一個數組數組,每個內部數組爲每行提供數據。

編輯後:在兩個方向上滾動

我的集合視圖。這是我在我的viewDidload中設置的東西:

- (void)viewDidLoad { 
    self.theData = @[@[@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",@"18",@"19",@"20"], @[@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",@"18",@"19",@"20"],@[@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",@"18",@"19",@"20"],@[@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",@"18",@"19",@"20"],@[@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",@"18",@"19",@"20"],@[@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",@"18",@"19",@"20"],@[@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",@"18",@"19",@"20"],@[@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",@"18",@"19",@"20"],@[@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",@"18",@"19",@"20"],@[@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",@"18",@"19",@"20"],@[@"Z0",@"Z1",@"Z2",@"Z3",@"Z4",@"Z5",@"Z6",@"Z7",@"Z8",@"Z9",@"Z10",@"Z11",@"Z12",@"Z13",@"Z14",@"Z15",@"Z16",@"Z17",@"Z18",@"Z19",@"Z20"]]; 
    MultpleLineLayout *layout = [[MultpleLineLayout alloc] init]; 
    self.collectionView = [[RDCollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout]; 
    self.collectionView.dataSource = self; 
    self.collectionView.delegate = self; 
    self.view.backgroundColor = [UIColor blackColor]; 
    [self.view addSubview:self.collectionView]; 
    [self.collectionView registerClass:[DataCell class] forCellWithReuseIdentifier:@"DataCell"]; 
    [self.collectionView reloadData]; 
} 
+0

問題仍然是滾動僅停留在一個方向上,我可以水平滾動這很棒,但是我已經隱藏了隱藏滾動的內容。有任何想法嗎? – MrShoot

+0

@MrShoot,我更新了我的答案,以顯示控制器中的設置。我沒有做任何特別的事情來讓它滾動雙向。 – rdelmar

+0

我的壞!我完全錯過了內容大小的一部分!傻我!很好的答案,謝謝大家的參考代碼 – MrShoot

相關問題