原创作品,允许转载,转载时请务必以超链接形式标明文章
原始出处 、作者信息和本声明。否则将追究法律责任。
http://zmhot88.blog.51cto.com/1338337/1358996
1
2
3
4
5
6
7
8
|
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
...........
UIView *testView2 = [[UIView alloc] init];
testView2.backgroundColor = UIColor.clearColor;
cell.selectedBackgroundView = testView2;
......
}
|
1
2
3
4
5
6
7
8
9
|
#define IOS7_OR_LATER ( [[[UIDevice currentDevice] systemVersion] compare:@"7.0"] != NSOrderedAscending )
- (
void
)setFrame:(CGRect)frame {
if
(IOS7_OR_LATER) {
NSInteger inset = 10;
frame.origin.x += inset;
frame.size.width -= 2 * inset;
}
[super setFrame:frame];
}
|
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
- (
void
)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if
([cell respondsToSelector:@selector(tintColor)]) {
if
(tableView == self.vTableView) {
CGFloat cornerRadius = 10.f;
cell.backgroundColor = UIColor.clearColor;
CAShapeLayer *layer = [[CAShapeLayer alloc] init];
CAShapeLayer *borderLayer = [[CAShapeLayer alloc] init];
CAShapeLayer *selectedLayer = [[CAShapeLayer alloc] init];
CGMutablePathRef borderPathRef = CGPathCreateMutable();
CGRect bounds0 = CGRectInset(cell.bounds, 0, 0);
NSLog(@
"bound0:%@"
,NSStringFromCGRect(cell.frame));
if
(indexPath.row == 0 && indexPath.row == [tableView numberOfRowsInSection:indexPath.section]-1) {
CGPathAddRoundedRect(borderPathRef, nil, bounds0, cornerRadius, cornerRadius);
}
else
if
(indexPath.row == 0) {
CGPathMoveToPoint(borderPathRef, nil, CGRectGetMinX(bounds0), CGRectGetMaxY(bounds0));
//left bottom
CGPathAddArcToPoint(borderPathRef, nil, CGRectGetMinX(bounds0), CGRectGetMinY(bounds0), CGRectGetMidX(bounds0), CGRectGetMinY(bounds0), cornerRadius);
CGPathAddArcToPoint(borderPathRef, nil, CGRectGetMaxX(bounds0), CGRectGetMinY(bounds0), CGRectGetMaxX(bounds0), CGRectGetMidY(bounds0), cornerRadius);
CGPathAddLineToPoint(borderPathRef, nil, CGRectGetMaxX(bounds0), CGRectGetMaxY(bounds0));
}
else
if
(indexPath.row == [tableView numberOfRowsInSection:indexPath.section]-1) {
CGPathMoveToPoint(borderPathRef, nil, CGRectGetMinX(bounds0), CGRectGetMinY(bounds0));
//left top
CGPathAddArcToPoint(borderPathRef, nil, CGRectGetMinX(bounds0), CGRectGetMaxY(bounds0), CGRectGetMidX(bounds0), CGRectGetMaxY(bounds0), cornerRadius);
CGPathAddArcToPoint(borderPathRef, nil, CGRectGetMaxX(bounds0), CGRectGetMaxY(bounds0), CGRectGetMaxX(bounds0), CGRectGetMidY(bounds0), cornerRadius);
CGPathAddLineToPoint(borderPathRef, nil, CGRectGetMaxX(bounds0), CGRectGetMinY(bounds0));
}
else
{
CGPathAddRect(borderPathRef, nil, CGRectInset(cell.bounds, 0, 1));
}
borderLayer.path = borderPathRef;
CFRelease(borderPathRef);
cornerRadius = 7.f;
CGMutablePathRef pathRef = CGPathCreateMutable();
CGRect bounds = CGRectInset(cell.bounds, 1, 1);
BOOL
addLine = NO;
if
(indexPath.row == 0 && indexPath.row == [tableView numberOfRowsInSection:indexPath.section]-1) {
CGPathAddRoundedRect(pathRef, nil, bounds, cornerRadius, cornerRadius);
}
else
if
(indexPath.row == 0) {
CGPathMoveToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMaxY(bounds0));
CGPathAddArcToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMinY(bounds), CGRectGetMidX(bounds), CGRectGetMinY(bounds), cornerRadius);
CGPathAddArcToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMinY(bounds), CGRectGetMaxX(bounds), CGRectGetMidY(bounds), cornerRadius);
CGPathAddLineToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMaxY(bounds0));
addLine = YES;
}
else
if
(indexPath.row == [tableView numberOfRowsInSection:indexPath.section]-1) {
CGPathMoveToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMinY(bounds0));
CGPathAddArcToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMaxY(bounds), CGRectGetMidX(bounds), CGRectGetMaxY(bounds), cornerRadius);
CGPathAddArcToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMaxY(bounds), CGRectGetMaxX(bounds), CGRectGetMidY(bounds), cornerRadius);
CGPathAddLineToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMinY(bounds0));
}
else
{
CGPathAddRect(pathRef, nil, CGRectInset(cell.bounds, 1, 0));
addLine = YES;
}
layer.path = pathRef;
selectedLayer.path = pathRef;
CFRelease(pathRef);
layer.fillColor = [UIColor whiteColor].CGColor;
selectedLayer.fillColor = [UIColor redColor].CGColor;
borderLayer.zPosition = 0.0f;
borderLayer.strokeColor = [UIColor blueColor].CGColor;
borderLayer.lineWidth = 1;
borderLayer.lineCap = kCALineCapRound;
borderLayer.lineJoin = kCALineJoinRound;
[borderLayer addSublayer:layer];
if
(addLine == YES) {
CALayer *lineLayer = [[CALayer alloc] init];
CGFloat lineHeight = (1.f / [UIScreen mainScreen].scale);
lineLayer.frame = CGRectMake(CGRectGetMinX(bounds)+1, bounds0.size.height-lineHeight, bounds0.size.width-2, lineHeight);
lineLayer.backgroundColor = tableView.separatorColor.CGColor;
[layer addSublayer:lineLayer];
}
//add general view
UIView *testView = [[UIView alloc] initWithFrame:bounds];
[testView.layer insertSublayer:borderLayer atIndex:0];
testView.backgroundColor = UIColor.clearColor;
cell.backgroundView = testView;
//add selected layer view;
UIView *testView2 = [[UIView alloc] initWithFrame:bounds];
[testView2.layer insertSublayer:selectedLayer atIndex:0];
testView2.backgroundColor = UIColor.clearColor;
cell.selectedBackgroundView = testView2;
}
}
}
|