iphone - 平滑 Core Graphics 中的圆形笔划

标签 iphone core-graphics rounded-corners smoothing stroke

我正在创建自己的具有渐变背景的 UITableViewCells。我已经解决了所有逻辑和绘图问题,但我想要解决的一件事是自定义单元格周围的“ block 状”:

alt text http://grab.by/27SM

如果你放大角落,你就能看到我在说什么。这是我用来生成单元格的代码:

CGContextRef c = UIGraphicsGetCurrentContext();
CGColorSpaceRef myColorspace = CGColorSpaceCreateDeviceRGB();
CGGradientRef myGradient = nil;
CGFloat components[8] = TABLE_CELL_BACKGROUND;
CGContextSetStrokeColorWithColor(c, [[UAColor colorWithWhite:0.7 alpha:1] CGColor]);
CGContextSetLineWidth(c, 2);
CGContextSetAllowsAntialiasing(c, YES);
CGContextSetShouldAntialias(c, YES);
CGFloat minx = CGRectGetMinX(rect) , midx = CGRectGetMidX(rect), maxx = CGRectGetMaxX(rect) ;
CGFloat miny = CGRectGetMinY(rect) , maxy = CGRectGetMaxY(rect) ;

CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, minx, miny);
CGPathAddArcToPoint(path, NULL, minx, maxy, midx, maxy, kDefaultMargin);
CGPathAddArcToPoint(path, NULL, maxx, maxy, maxx, miny, kDefaultMargin);
CGPathAddLineToPoint(path, NULL, maxx, miny);
CGPathAddLineToPoint(path, NULL, minx, miny);
CGPathCloseSubpath(path);

// Fill and stroke the path
CGContextSaveGState(c);
CGContextAddPath(c, path);
CGContextClip(c);

CGFloat locations[2] = { 0.0, 1.0 };
CGFloat mycomponents[8] = TABLE_CELL_BACKGROUND;
CGColorSpaceRef myColorspace = CGColorSpaceCreateDeviceRGB();
myGradient = CGGradientCreateWithColorComponents(myColorspace, mycomponents, locations, 2);
CGContextDrawLinearGradient(c, myGradient, CGPointMake(minx,miny), CGPointMake(minx,maxy), 0);

CGContextRestoreGState(c);  
CGContextAddPath(c, path);
CGContextStrokePath(c);

如何使边缘平滑,同时保持所有单元格的边缘厚度一致?

最佳答案

您的线宽设置为 2 磅。发生的情况是您的代码正在计算边界矩形而不了解线的宽度。结果是,对于形状的每个直线段,只有笔划宽度的一半可见。在圆弧上,完整的笔划宽度是可见的。

这是我的应用程序 Funversation 中的相关代码段,用于绘制与您所拥有的类似的圆角扑克牌。

CGRect rect = [self bounds];
rect.size.width -= lineWidth;
rect.size.height -= lineWidth;
rect.origin.x += lineWidth / 2.0;
rect.origin.y += lineWidth / 2.0;

在计算 minx、midx、maxx 等之前添加该内容,并且形状的笔划应该是统一的。

关于iphone - 平滑 Core Graphics 中的圆形笔划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2181279/

相关文章:

iphone - 在 Objective-C 上缩放 UIScrollview

iphone - 如何在应用程序中启用 iOS 6.0 全景相机?

ios - iOS4 上未显示 CoreGraphics 渐变

objective-c - 是否可以制作没有圆边的 UITextField?

java - 如何在 android studio 中圆化对话框角

iphone - 如何获取表中列的所有数据

ios - 无法让 CGGradientRef 使用 alpha

Xcode 使用苹果 native 框架将原始数据从 8 位/ channel 转换为 16 位/ channel

ios - 实现圆形按钮

iphone - 只需更改 iPhone 应用程序的应用程序可执行文件的名称