iOS UITableView设置section圆角
分组圆角.gif
这个一直觉得简单又不知道从哪儿下手的功能,今天有空,找了下资料动手做一做
主要利用UITableViewDelegate
的willDisplayCell
方法结合UIBezierPath
绘制显示的圆角
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath;
// 圆角角度 CGFloat radius = 10.f; // 设置cell 背景色为透明 cell.backgroundColor = UIColor.clearColor; // 创立两个layer CAShapeLayer *normalLayer = [[CAShapeLayer alloc] init]; CAShapeLayer *selectLayer = [[CAShapeLayer alloc] init]; // 获取显示区域大小 CGRect bounds = CGRectInset(cell.bounds, 10, 0); // 获取每组行数 NSInteger rowNum = [tableView numberOfRowsInSection:indexPath.section]; // 贝塞尔曲线 UIBezierPath *bezierPath = nil;
每组考虑只有一行和有多行的情况,若行数为1,则这个cell的每个角都是圆角,否则第一行的左上
和右上
为圆角,最后一行的左下
和右下
为圆角
if (rowNum == 1) { // 一组只有一行(四个角一律为圆角) bezierPath = [UIBezierPath bezierPathWithRoundedRect:bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:CGSizeMake(radius, radius)]; } else { if (indexPath.row == 0) { // 每组第一行(增加左上和右上的圆角) bezierPath = [UIBezierPath bezierPathWithRoundedRect:bounds byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight) cornerRadii:CGSizeMake(radius, radius)]; } else if (indexPath.row == rowNum - 1) { // 每组最后一行(增加左下和右下的圆角) bezierPath = [UIBezierPath bezierPathWithRoundedRect:bounds byRoundingCorners:(UIRectCornerBottomLeft|UIRectCornerBottomRight) cornerRadii:CGSizeMake(radius, radius)]; } else { // 每组不是首位的行不设置圆角 bezierPath = [UIBezierPath bezierPathWithRect:bounds]; } }
而后将贝塞尔曲线的路径赋值给图层,并将图层增加到view中
// 把已经绘制好的贝塞尔曲线路径赋值给图层,而后图层根据path进行图像渲染render normalLayer.path = bezierPath.CGPath; selectLayer.path = bezierPath.CGPath; UIView *nomarBgView = [[UIView alloc] initWithFrame:bounds]; // 设置填充颜色 normalLayer.fillColor = [UIColor colorWithWhite:0.95 alpha:1.0].CGColor; // 增加图层到nomarBgView中 [nomarBgView.layer insertSublayer:normalLayer atIndex:0]; nomarBgView.backgroundColor = UIColor.clearColor; cell.backgroundView = nomarBgView;
此时圆角显示就完成了,但是假如没有取消cell的点击效果,还是会出现一个灰色的长方形的形状,再用上面创立的selectLayer
给cell
增加一个selectedBackgroundView
UIView *selectBgView = [[UIView alloc] initWithFrame:bounds]; selectLayer.fillColor = [UIColor colorWithWhite:0.95 alpha:1.0].CGColor; [selectBgView.layer insertSublayer:selectLayer atIndex:0]; selectBgView.backgroundColor = UIColor.clearColor; cell.selectedBackgroundView = selectBgView;
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » iOS UITableView设置section圆角
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » iOS UITableView设置section圆角