代码例子:http://pan.baidu.com/s/1bn06eOf http://download.csdn.net/detail/qqmcy/6887385
Cell.h
#import <UIKit/UIKit.h> @interface Cell : UICollectionViewCell @property (strong, nonatomic) UILabel* label; @end
//
// Cell.m
// CollectionViewDemo1
//
// Created by 杜甲 on 14-1-26.
// Copyright (c) 2014年 杜甲. All rights reserved.
//
#import "Cell.h"
@implementation Cell
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self.contentView.frame = CGRectMake(0, 0, 50, 15);
self.label = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 50.0, 15)];
self.label.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
self.label.textAlignment = NSTextAlignmentCenter;
self.label.font = [UIFont boldSystemFontOfSize:15];
self.label.textColor = [UIColor colorWithRed:181.0 / 255.0 green:181.0 / 255.0 blue:181.0 / 255.0 alpha:1];
[self.contentView addSubview:self.label];
}
return self;
}
@end
#import <UIKit/UIKit.h> @interface LineLayout : UICollectionViewFlowLayout @end
#import "LineLayout.h"
#define ITEM_SIZE 20
@implementation LineLayout
#define ACTIVE_DISTANCE 100
#define ZOOM_FACTOR 0
-(id)init
{
self = [super init];
if (self) {
self.itemSize = CGSizeMake(50, 15);
self.scrollDirection = UICollectionViewScrollDirectionVertical;
self.sectionInset = UIEdgeInsetsMake(50, 30.0, 0, 50.0);
self.minimumLineSpacing = 10;
self.minimumInteritemSpacing = 70;
self.collectionView.backgroundColor = [UIColor whiteColor];
}
return self;
}MyViewController.h
#import <UIKit/UIKit.h> @interface MyViewController : UICollectionViewController @property (strong , nonatomic) NSArray* m_provinceArr; @property (strong , nonatomic) NSIndexPath * m_lastAccessed; @end
//
// MyViewController.m
// CollectionViewDemo1
//
// Created by 杜甲 on 14-1-26.
// Copyright (c) 2014年 杜甲. All rights reserved.
//
#import "MyViewController.h"
#import "Cell.h"
@interface MyViewController ()
@end
@implementation MyViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.m_provinceArr = @[@"北京",@"天津",@"上海",@"重庆",@"河北",@"山西",@"河北",@"辽宁",@"吉林",@"黑龙江",@"河北",@"江苏",@"浙江",@"安徽",@"福建",@"江西",@"山东",@"河南",@"湖北",@"湖南",@"广东",@"海南",@"四川",@"贵州",@"云南",@"陕西",@"甘肃",@"青海",@"西藏",@"广西",@"内蒙",@"宁夏",@"新疆"];
self.view.frame = CGRectMake(0, 0, 275, 640);
self.collectionView.allowsMultipleSelection = YES;
self.collectionView.backgroundColor = [UIColor grayColor];
[self.collectionView registerClass:[Cell class] forCellWithReuseIdentifier:@"MY_CELL"];
UIPanGestureRecognizer* panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGesture:)];
[self.collectionView addGestureRecognizer:panGesture];
}
-(void)panGesture:(UIGestureRecognizer*)gestureRecognizer
{
float pointerX = [gestureRecognizer locationInView:self.collectionView].x;
NSLog(@"pointerX = %f",pointerX);
float pointerY = [gestureRecognizer locationInView:self.collectionView].y;
for(Cell* cell1 in self.collectionView.visibleCells) {
float cellLeftTop = cell1.frame.origin.x;
NSLog(@"cellLeftTop = %f",cellLeftTop);
float cellRightTop = cellLeftTop + cell1.frame.size.width;
float cellLeftBottom = cell1.frame.origin.y;
float cellRightBottom = cellLeftBottom + cell1.frame.size.height;
if (pointerX >= cellLeftTop && pointerX <= cellRightTop && pointerY >= cellLeftBottom && pointerY <= cellRightBottom) {
NSIndexPath* touchOver = [self.collectionView indexPathForCell:cell1];
if (self.m_lastAccessed != touchOver) {
[cell1.label setTextColor:[UIColor redColor]];
if (cell1.selected) {
[self deselectCellForCollectionView:self.collectionView atIndexPath:touchOver];
}
else
{
[self selectCellForCollectionView:self.collectionView atIndexPath:touchOver];
}
}
self.m_lastAccessed = touchOver;
}
}
if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
self.m_lastAccessed = nil;
self.collectionView.scrollEnabled = YES;
}
}
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
Cell* cell = (Cell*)[collectionView cellForItemAtIndexPath:indexPath];
[cell.label setTextColor:[UIColor redColor]];
NSLog(@"indexPath.item = %d",indexPath.item);
}
/*Cell已经选择时回调*/
-(void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath
{
Cell* cell = (Cell*)[collectionView cellForItemAtIndexPath:indexPath];
[cell.label setTextColor:[UIColor colorWithRed:181.0 / 255.0 green:181.0 / 255.0 blue:181.0 / 255.0 alpha:1]];
}
/*Cell未选择时回调*/
-(void)selectCellForCollectionView:(UICollectionView*)collection atIndexPath:(NSIndexPath*)indexPath
{
[collection selectItemAtIndexPath:indexPath animated:YES scrollPosition:UICollectionViewScrollPositionNone];
[self collectionView:collection didSelectItemAtIndexPath:indexPath];
}
-(void)deselectCellForCollectionView:(UICollectionView*)collection atIndexPath:(NSIndexPath*)indexPath
{
[collection deselectItemAtIndexPath:indexPath animated:YES];
[self collectionView:collection didDeselectItemAtIndexPath:indexPath];
}
- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section;
{
return [self.m_provinceArr count];
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath;
{
Cell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"MY_CELL" forIndexPath:indexPath];
cell.label.text = [NSString stringWithFormat:@"%@",[self.m_provinceArr objectAtIndex:indexPath.item]];
return cell;
}
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return UIInterfaceOrientationIsLandscape(toInterfaceOrientation);
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
#import <UIKit/UIKit.h> #import "MyViewController.h" @interface ViewController : UIViewController @property (strong , nonatomic) MyViewController* m_v; @end
//
// ViewController.m
// CollectionViewDemo1
//
// Created by 杜甲 on 14-1-26.
// Copyright (c) 2014年 杜甲. All rights reserved.
//
#import "ViewController.h"
#import "LineLayout.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
LineLayout* lineLayout = [[LineLayout alloc] init];
self.m_v = [[MyViewController alloc] initWithCollectionViewLayout:lineLayout];
[self.view addSubview:self.m_v.view];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
UICollectionViewController 实现利用手势滑动选择
原文:http://blog.csdn.net/qqmcy/article/details/18813045