`
dcj3sjt126com
  • 浏览: 1877729 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ios UICollectionView的使用

    博客分类:
  • IOS
阅读更多

UICollectionView的使用有两种方法,一种是继承UICollectionViewController,这个Controller会自带一个UICollectionView;另外一种是作为一个视图放在普通的UIViewController里面。

个人更喜欢第二种。下面采用第二种方式简单介绍一下UICollectionView的使用。

1.UIViewController实现委托,代码如下

@interface YourViewController : UIViewController<UICollectionViewDataSource,UICollectionViewDelegate>

2.声明UICollectionView,代码如下

@property(nonatomic,retain)UICollectionView*myCollectionView;

3.初始化UICollectionView,代码如下

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self initConllectionView];
}
-(void)initConllectionView{
    CircleLayout*layout=[[CircleLayout alloc] init];
    myCollectionView=[[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout];
    [myCollectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cell"];
    myCollectionView.backgroundColor=[UIColor whiteColor];
    myCollectionView.delegate=self;
    myCollectionView.dataSource=self;
    [self.view addSubview:myCollectionView];
    [layout release];
}

这里面的CircleLayout继承自UICollectionViewLayout,主要用来表现UICollectionView的布局以及一些属性。

4.实现- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;

-(UICollectionViewCell*)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    UICollectionViewCell*cell=[collectionView dequeueReusableCellWithReuseIdentifier:CELL_STR forIndexPath:indexPath];
    for (UIView*view in cell.contentView.subviews) {
        if (view) {
            [view removeFromSuperview];
        }
    }
    UIImageView*imgView=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, ITEM_WIDTH, ITEM_WIDTH)];
    if (indexPath.row>4) {
        imgView.image=[UIImage imageNamed:@"apple.png"];
    }else{
        imgView.image=[UIImage imageNamed:@"applec.png"];
    }
    [cell.contentView addSubview:imgView];
    [imgView release];
    return  cell;
}

5.cell的大小

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
    return CGSizeMake(130,130);
}

 

CircleLayout的代码:

CircleLayout.h

#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
@interface CircleLayout : UICollectionViewLayout
@property (nonatomic, assign) CGPoint center;
@property (nonatomic, assign) CGFloat radius;
@property (nonatomic, assign) NSInteger cellCount;
@end

 

CircleLayout.m

 

#define ITEM_SIZE 130
#import "CircleLayout.h"

@implementation CircleLayout
@synthesize cellCount,center,radius;
- (void)prepareLayout{
    [super prepareLayout];
    CGSize size = self.collectionView.frame.size;
    cellCount=[self.collectionView numberOfItemsInSection:0];
    center=CGPointMake(size.width/2, size.height/2);
    radius = MIN(size.width, size.height) / 2.5;
}
-(CGSize)collectionViewContentSize{
    return [self collectionView].frame.size;
}
- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)path
{
    UICollectionViewLayoutAttributes* attributes = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:path];
    attributes.size = CGSizeMake(ITEM_SIZE, ITEM_SIZE);
    attributes.center = CGPointMake(center.x + radius * cosf(2 * path.item * M_PI /cellCount),
                                    
                                    center.y + radius * sinf(2 * path.item * M_PI /cellCount));
    return attributes;
}
-(NSArray*)layoutAttributesForElementsInRect:(CGRect)rect{
    NSMutableArray* attributes = [NSMutableArray array];
    for (NSInteger i=0 ; i < self.cellCount; i++) {
        NSIndexPath* indexPath = [NSIndexPath indexPathForItem:i inSection:0];
        [attributes addObject:[self layoutAttributesForItemAtIndexPath:indexPath]];
    }
    return attributes;
}
- (UICollectionViewLayoutAttributes *)initialLayoutAttributesForInsertedItemAtIndexPath:(NSIndexPath *)itemIndexPath{
    UICollectionViewLayoutAttributes* attributes = [self layoutAttributesForItemAtIndexPath:itemIndexPath];
    attributes.alpha = 0.0;
    attributes.center = CGPointMake(center.x, center.y);
    return attributes;
}
- (UICollectionViewLayoutAttributes *)finalLayoutAttributesForDeletedItemAtIndexPath:(NSIndexPath *)itemIndexPath
{
    UICollectionViewLayoutAttributes* attributes = [self layoutAttributesForItemAtIndexPath:itemIndexPath];
    attributes.alpha = 0.0;
    attributes.center = CGPointMake(center.x, center.y);
    attributes.transform3D = CATransform3DMakeScale(0.1, 0.1, 1.0);
    return attributes;
}
@end

分享到:
评论

相关推荐

    IOS UICollectionView布局详解

    在iOS开发中,UICollectionView是一种强大的UI组件,用于展示可滚动的、多列或多行的数据集合。这个组件在设计用户界面时提供了极大的灵活性,允许开发者自定义布局,展示各种复杂的数据结构。本文将深入探讨...

    iOS UICollectionView的简单使用

    在iOS开发中,UICollectionView是一个强大的视图组件,用于展示数据集合,可以自定义布局和单元格样式,实现...通过掌握UICollectionView的基本使用和自定义布局,开发者可以提升用户体验,打造出更具吸引力的iOS应用。

    IosUicollectionview2ndEdition.pdf 英文原版

    Ios Uicollectionview 2nd Edition

    iOS UICollectionView: The Complete Guide, Second Edition 英文版

    Fully updated for iOS 7, iOS UICollectionView: The Complete Guide, Second Edition will help you build highly immersive, cutting-edge iOS user interfaces that transform your apps from good to great!...

    ios-UICollectionViewCell每次滚动设置特定的距离.zip

    在iOS开发中,UICollectionView是一个非常重要的组件,它允许开发者创建高度可定制的网格布局,用于显示和操作数据集合。在标题“ios-UICollectionViewCell每次滚动设置特定的距离”中提到的问题,主要是指如何在...

    iOS UICollectionView刷新时闪屏的解决方法

    iOS UICollectionView是一种常用的列表视图控件,但是当我们在使用它时,可能会遇到很多问题,其中之一就是刷新时闪屏的问题。今天,我们将探讨iOS UICollectionView刷新时闪屏的解决方法。 方法一:使用...

    ios-UICollectionView的简单示例.zip

    这个“ios-UICollectionView的简单示例.zip”文件应该包含了一个简单的项目,演示了如何使用UICollectionView来创建一个自定义的多行展示。 UICollectionView与UITableView类似,都是用来展示数据集合的视图,但...

    UICollectionView使用的demo

    通过这个"UICollectionView使用的demo",你应该能够学习到如何在iOS应用中创建、配置并使用UICollectionView,包括基本的数据源设置、cell的定制、布局的调整以及用户交互的处理。实践中遇到问题,记得查阅Apple的...

    ios uicollectionview 横向滚动

    总之,通过使用UICollectionView和自定义UICollectionViewFlowLayout,我们可以轻松地在iOS应用中实现横向滚动的效果。这个功能不仅提供了良好的用户体验,还能适应各种屏幕尺寸和设备方向,是iOS开发中的重要工具。

    iOS UICollectionView 实现卡片效果

    本demo使用UICollectionView实现了卡片效果,自定义了UICollectionViewFlowLayout,可以修改UICollectionViewFlowLayout的配置使卡片展现不同效果

    ios-UICollectionView实现多分区自定义拖动排序功能.zip

    1、在一个分区拖动排序的基础上增加到两个分区可... 2、在拖动的过程中,collectionView 会自动滑动显示不可见的cell; 3、可根据自己的需求对代码进行优化更改; 4、使用中存在的bug留言即可,有时间会进行优化;

    ios-UICollectionView demo.zip

    这个"ios-UICollectionView demo.zip"文件提供了一个示例,展示了如何使用UICollectionView来创建一个类似商城楼层的效果。在这个场景下,UICollectionView通常用于展示商品分类,每个楼层代表一类商品,每个单元格...

    iOS - UICollectionView 书架效果 长按跨section拖拽cell

    在iOS开发中,UICollectionView是一种强大的视图组件,用于展示可滚动的数据集合,它可以灵活地自定义布局和交互方式。在本教程中,我们将探讨如何实现一个具有“书架效果”的UICollectionView,用户可以通过长按并...

    iOS UICollectionView 不规则排序

    在iOS开发中,UICollectionView是一种强大的视图组件,用于展示可滚动的数据集合,它允许开发者创建各种自定义布局,以满足不同界面设计的需求。本话题主要关注"不规则排序",这意味着我们将探讨如何通过自定义...

    iOS UICollectionView(2nd) 无水印pdf

    iOS UICollectionView(2nd) 英文无水印pdf 第2版 pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系...

    iOS UIcollectionview瀑布流

    在iOS应用开发中,UIcollectionView是一种非常强大的组件,它允许开发者以各种布局方式展示数据,其中瀑布流(Waterfall)布局就是一种常见的实现方式。瀑布流布局源于网页设计,因其像瀑布一样逐级下落的视觉效果而...

    ios-UICollectionView滚动加载页面.zip

    这个“ios-UICollectionView滚动加载页面.zip”文件内容显然涉及到了使用UICollectionView来实现一个横向滚动并自动加载更多内容的页面。下面我们将深入探讨这个主题。 首先,UICollectionView的核心是其自定义布局...

    ios-UICollectionView的简单滑动.zip

    在iOS开发中,UICollectionView是一种强大的UI组件,用于展示可滚动的、网格布局的数据集合。这个“ios-UICollectionView的简单滑动.zip”文件很显然提供了一个关于如何实现UICollectionView滑动功能的示例,包括...

Global site tag (gtag.js) - Google Analytics