美文网首页
怎样让collectionView横向滑动并且横向加载数据

怎样让collectionView横向滑动并且横向加载数据

作者: Aldon丶 | 来源:发表于2017-03-30 09:54 被阅读0次

    本着想做一个横向滑动的视图,可是用了collectionView数据是纵向加载,如何让collectionView横向滑动,并且横向加载呢?自定义UICollectionViewFlowLayout

    代码如下:

    ```

    #import

    @interfaceGiftCollectionViewLayout :UICollectionViewFlowLayout

    //一行中cell的个数

    @property(nonatomic,assign)NSUIntegeritemCountPerRow;

    //一页显示多少行

    @property(nonatomic,assign)NSUIntegerrowCount;

    @property(strong,nonatomic)NSMutableArray*allAttributes;

    @end

    ```

    ```

    #import"GiftCollectionViewLayout.h"

    @interfaceGiftCollectionViewLayout()

    @end

    @implementationGiftCollectionViewLayout

    -(instancetype)init

    {

    if(self= [superinit])

    {

    }

    returnself;

    }

    - (void)prepareLayout

    {

    [superprepareLayout];

    self.rowCount=2;

    self.itemCountPerRow=4;

    self.allAttributes= [NSMutableArrayarray];

    NSUIntegercount = [self.collectionViewnumberOfItemsInSection:0];

    for(NSUIntegeri =0; i

    NSIndexPath*indexPath = [NSIndexPathindexPathForItem:iinSection:0];

    UICollectionViewLayoutAttributes*attributes = [selflayoutAttributesForItemAtIndexPath:indexPath];

    [self.allAttributesaddObject:attributes];

    }

    }

    - (CGSize)collectionViewContentSize

    {

    return[supercollectionViewContentSize];

    }

    - (UICollectionViewLayoutAttributes*)layoutAttributesForItemAtIndexPath:(NSIndexPath*)indexPath

    {

    NSUIntegeritem = indexPath.item;

    NSUIntegerx;

    NSUIntegery;

    [selftargetPositionWithItem:itemresultX:&xresultY:&y];

    NSUIntegeritem2 = [selforiginItemAtX:xy:y];

    NSIndexPath*theNewIndexPath = [NSIndexPathindexPathForItem:item2inSection:indexPath.section];

    UICollectionViewLayoutAttributes*theNewAttr = [superlayoutAttributesForItemAtIndexPath:theNewIndexPath];

    theNewAttr.indexPath= indexPath;

    returntheNewAttr;

    }

    - (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect

    {

    NSArray*attributes = [superlayoutAttributesForElementsInRect:rect];

    NSMutableArray*tmp = [NSMutableArrayarray];

    for(UICollectionViewLayoutAttributes*attrinattributes) {

    for(UICollectionViewLayoutAttributes*attr2inself.allAttributes) {

    if(attr.indexPath.item== attr2.indexPath.item) {

    [tmpaddObject:attr2];

    break;

    }

    }

    }

    returntmp;

    }

    //根据item计算目标item的位置

    // x横向偏移y竖向偏移

    - (void)targetPositionWithItem:(NSUInteger)item

    resultX:(NSUInteger*)x

    resultY:(NSUInteger*)y

    {

    NSUIntegerpage = item/(self.itemCountPerRow*self.rowCount);

    NSUIntegertheX = item %self.itemCountPerRow+ page *self.itemCountPerRow;

    NSUIntegertheY = item /self.itemCountPerRow- page *self.rowCount;

    if(x !=NULL) {

    *x = theX;

    }

    if(y !=NULL) {

    *y = theY;

    }

    }

    //根据偏移量计算item

    - (NSUInteger)originItemAtX:(NSUInteger)x

    y:(NSUInteger)y

    {

    NSUIntegeritem = x *self.rowCount+ y;

    returnitem;

    }

    items 必须为 row * section 的整数倍,有待改善!

    ```

    相关文章

      网友评论

          本文标题:怎样让collectionView横向滑动并且横向加载数据

          本文链接:https://www.haomeiwen.com/subject/yasuottx.html