我在任何地方(搜索引擎、文档、此处等)都找不到任何内容来展示如何在也剪辑 subview 的元素上创建圆角(尤其是在分组 TableView 中)。
我有代码可以正确地从具有 4 个弧(圆角)的路径中创建一个圆角矩形,该代码已在我的子类 uitableviewcell 中的 drawRect: 方法中进行了测试。问题是 subview (恰好是带有内部 uiimageview 的 uibuttons)不遵守 uitableviewcell 遵守的 CGContextClip() 。
这是代码:
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGFloat radius = 12;
CGFloat width = CGRectGetWidth(rect);
CGFloat height = CGRectGetHeight(rect);
// Make sure corner radius isn't larger than half the shorter side
if (radius > width/2.0)
radius = width/2.0;
if (radius > height/2.0)
radius = height/2.0;
CGFloat minx = CGRectGetMinX(rect) + 10;
CGFloat midx = CGRectGetMidX(rect);
CGFloat maxx = CGRectGetMaxX(rect) - 10;
CGFloat miny = CGRectGetMinY(rect);
CGFloat midy = CGRectGetMidY(rect);
CGFloat maxy = CGRectGetMaxY(rect);
[[UIColor greenColor] set];
CGContextBeginPath(context);
CGContextMoveToPoint(context, minx, midy);
CGContextAddArcToPoint(context, minx, miny, midx, miny, radius);
CGContextAddArcToPoint(context, maxx, miny, maxx, midy, radius);
CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, radius);
CGContextAddArcToPoint(context, minx, maxy, minx, midy, radius);
CGContextClip(context);
CGContextFillRect(context, rect);
[super drawRect:rect];
}
因为这个特定情况是静态的(仅在 1 个特定按钮行中显示),所以我可以编辑用于按钮的图像以获得所需的效果。
但是,我还有另一个动态案例。具体来说,一个包含大量数据库驱动结果的分组表,这些结果将显示可能位于第一行或最后一行的带圆角的照片,因此需要进行裁剪)。
那么,是否可以创建一个 CGContextClip() 来剪辑 subview ?如果是这样,怎么办?
最佳答案
CALayer 对象具有圆角函数:
UIView * someview = something here;
CALayer * layer = [someview layer];
layer.masksToBounds = YES;
layer.cornerRadius = radius;
一切都准备好了。您还可以添加一些边框颜色和其他内容,如果您感兴趣,请查看文档。
关于iphone - UITableViewCell 圆角和剪辑 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1331632/