|
// Customize the number of sections in the table view. |
|
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView |
|
{ |
|
return 1; |
|
} |
|
|
|
// Say we have 3 cells. |
|
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section |
|
{ |
|
return 3; |
|
} |
|
|
|
// Customize the appearance of table view cells. |
|
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath |
|
{ |
|
static NSString *CellIdentifier = @"Cell"; |
|
|
|
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; |
|
if (cell == nil) { |
|
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; |
|
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; |
|
} |
|
|
|
// Configure the cell. |
|
cell.textLabel.text = NSLocalizedString(@"Detail", @"Detail"); |
|
cell.imageView.image = [UIImage imageNamed:@"IMG_0143.JPG"]; |
|
return cell; |
|
} |
|
|
|
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath |
|
{ |
|
// For cell only has one elment. |
|
// cell.contentView.layer.cornerRadius = 8.f; |
|
// cell.contentView.layer.masksToBounds = YES; |
|
|
|
if (indexPath.row == 0) { |
|
// first row |
|
|
|
CGRect cellRect = cell.contentView.bounds; |
|
CGMutablePathRef firstRowPath = CGPathCreateMutable(); |
|
CGPathMoveToPoint(firstRowPath, NULL, CGRectGetMinX(cellRect), CGRectGetMaxY(cellRect)); |
|
CGPathAddLineToPoint(firstRowPath, NULL, CGRectGetMinX(cellRect), 8.f); |
|
CGPathAddArcToPoint(firstRowPath, NULL, CGRectGetMinX(cellRect), CGRectGetMinY(cellRect), 8.f, CGRectGetMinY(cellRect), 8.f); |
|
CGPathAddLineToPoint(firstRowPath, NULL, CGRectGetMaxX(cellRect) - 8.f, 0.f); |
|
CGPathAddArcToPoint(firstRowPath, NULL, CGRectGetMaxX(cellRect), CGRectGetMinY(cellRect), CGRectGetMaxX(cellRect), 8.f, 8.f); |
|
CGPathAddLineToPoint(firstRowPath, NULL, CGRectGetMaxX(cellRect), CGRectGetMaxY(cellRect)); |
|
CGPathCloseSubpath(firstRowPath); |
|
|
|
CAShapeLayer *newSharpLayer = [[CAShapeLayer alloc] init]; |
|
newSharpLayer.path = firstRowPath; |
|
newSharpLayer.fillColor = [[UIColor whiteColor] colorWithAlphaComponent:1.f].CGColor; |
|
CFRelease(firstRowPath); |
|
|
|
cell.contentView.layer.mask = newSharpLayer; |
|
// not necessary with ARC |
|
//[newSharpLayer release]; |
|
|
|
}else if (indexPath.row == 2){ |
|
// last row |
|
CGRect cellRect = cell.contentView.bounds; |
|
CGMutablePathRef lastRowPath = CGPathCreateMutable(); |
|
CGPathMoveToPoint(lastRowPath, NULL, CGRectGetMinX(cellRect), CGRectGetMinY(cellRect)); |
|
CGPathAddLineToPoint(lastRowPath, NULL, CGRectGetMaxX(cellRect), CGRectGetMinY(cellRect)); |
|
CGPathAddLineToPoint(lastRowPath, NULL, CGRectGetMaxX(cellRect), CGRectGetMaxY(cellRect) - 8.f); |
|
CGPathAddArcToPoint(lastRowPath, NULL, CGRectGetMaxX(cellRect), CGRectGetMaxY(cellRect), CGRectGetMaxX(cellRect)- 8.f, CGRectGetMaxY(cellRect), 8.f); |
|
CGPathAddLineToPoint(lastRowPath, NULL, 8.f, CGRectGetMaxY(cellRect)); |
|
CGPathAddArcToPoint(lastRowPath, NULL, CGRectGetMinX(cellRect), CGRectGetMaxY(cellRect), CGRectGetMinX(cellRect), CGRectGetMaxY(cellRect) - 8.f, 8.f); |
|
CGPathCloseSubpath(lastRowPath); |
|
|
|
CAShapeLayer *newSharpLayer = [[CAShapeLayer alloc] init]; |
|
newSharpLayer.path = lastRowPath; |
|
newSharpLayer.fillColor = [[UIColor whiteColor] colorWithAlphaComponent:1.f].CGColor; |
|
CFRelease(lastRowPath); |
|
|
|
cell.contentView.layer.mask = newSharpLayer; |
|
// not necessary with ARC |
|
//[newSharpLayer release]; |
|
|
|
} |
|
|
|
|
|
} |
This was extremely helpful to me. Many thanks!