自定义Layout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
//
// HoneyCombLayout.h
// Demo-Layouts
//
// Created by 杜子兮(duzixi) on 14-9-1.
// Copyright (c) 2014年 lanou3g.com All rights reserved.
//
#
import
<uikit uikit.h=
""
>
@interface
HoneyCombLayout : UICollectionViewLayout
@property
(nonatomic, assign) NSInteger margin;
@property
(nonatomic, assign) NSInteger oX;
@property
(nonatomic, assign) NSInteger oY;
@end
</uikit>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
//
// HoneyCombLayout.m
// Demo-Layouts
//
// Created by 杜子兮(duzixi) on 14-9-1.
// Copyright (c) 2014年 lanou3g.com All rights reserved.
//
#
import
HoneyCombLayout.h
@implementation
HoneyCombLayout
/// 返回内容大小,用于判断是否需要加快滑动
-(CGSize)collectionViewContentSize
{
float
height = (SIZE + self.margin) * ([self.collectionView numberOfItemsInSection:
0
] /
4
+
1
);
return
CGSizeMake(
320
, height);
}
/// 返回YES,改变布局
/*
- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
{
return YES;
}
*/
#pragma mark - UICollectionViewLayout
/// 为每一个Item生成布局特性
- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewLayoutAttributes *attributes = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath];
UICollectionView *collection = self.collectionView;
float
x = (SIZE + self.margin) * (indexPath.item % COL +
1
) *
0.75
;
float
y = (SIZE + self.margin) * (indexPath.item / COL +
0.5
) * cos(M_PI *
30
.0f /
180
.0f);
if
(indexPath.item %
2
==
1
) {
y += (SIZE + self.margin) *
0.5
* cosf(M_PI *
30
.0f /
180
.0f);
}
x += self.oX;
y += self.oY;
attributes.center = CGPointMake(x + collection.contentOffset.x, y + collection.contentOffset.y);
attributes.size = CGSizeMake(SIZE, SIZE * cos(M_PI *
30
.0f /
180
.0f));
return
attributes;
}
-(NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
{
NSArray *arr = [
super
layoutAttributesForElementsInRect:rect];
if
([arr count] >
0
) {
return
arr;
}
NSMutableArray *attributes = [NSMutableArray array];
for
(NSInteger i =
0
; i < [self.collectionView numberOfItemsInSection:
0
]; i++) {
NSIndexPath *indexPath = [NSIndexPath indexPathForItem:i inSection:
0
];
[attributes addObject:[self layoutAttributesForItemAtIndexPath:indexPath]];
}
return
attributes;
}
@end
|
自定义cell:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
//
// HoneycombViewCell.h
// Demo-Layouts
//
// Created by 杜子兮(duzixi) on 14-9-1.
// Copyright (c) 2014年 lanou3g.com All rights reserved.
//
#
import
<uikit uikit.h=
""
>
@interface
HoneycombViewCell : UICollectionViewCell
@property
(nonatomic,strong) UILabel *titleLabel;
@end
</uikit>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
//
// HoneycombViewCell.m
// Demo-Layouts
//
// Created by 杜子兮(duzixi) on 14-9-1.
// Copyright (c) 2014年 lanou3g.com All rights reserved.
//
#
import
HoneycombViewCell.h
@implementation
HoneycombViewCell
- (id)initWithFrame:(CGRect)frame
{
self = [
super
initWithFrame:frame];
if
(self) {
// Initialization code
self.titleLabel = [[UILabel alloc] init];
self.titleLabel.textColor = [UIColor whiteColor];
[self.contentView addSubview:self.titleLabel];
}
return
self;
}
-(
void
)layoutSubviews
{
[
super
layoutSubviews];
// step 1: 生成六边形路径
CGFloat longSide = SIZE *
0.5
* cosf(M_PI *
30
/
180
);
CGFloat shortSide = SIZE *
0.5
* sin(M_PI *
30
/
180
);
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(
0
, longSide)];
[path addLineToPoint:CGPointMake(shortSide,
0
)];
[path addLineToPoint:CGPointMake(shortSide + SIZE *
0.5
,
0
)];
[path addLineToPoint:CGPointMake(SIZE, longSide)];
[path addLineToPoint:CGPointMake(shortSide + SIZE *
0.5
, longSide *
2
)];
[path addLineToPoint:CGPointMake(shortSide, longSide *
2
)];
[path closePath];
// step 2: 根据路径生成蒙板
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.path = [path CGPath];
// step 3: 给cell添加模版
self.layer.mask = maskLayer;
self.backgroundColor = [UIColor orangeColor];
self.titleLabel.textAlignment = NSTextAlignmentCenter;
self.titleLabel.frame = self.contentView.frame;
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/
@end
|