我正在创建具有渐变背景的UitableViewCells。我有所有的逻辑和绘画,但是我想修复的一件事是我自定义单元的角落周围的“矮胖”:

alt文本http://grab.by/27SM

如果您放大角落,您可以看到我在说什么。这是I A用于生成单元格的代码:

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等之前,您的形状应均匀。

其他提示

使中风保持一致的另一种方法是移动addpath,并在RestoreGstate呼叫上方呼叫,也就是说,剪裁时中风。

对于使用此解决方案的真正2分宽的中风,只需将放置在图形状态的线宽度(即,将其设置为4 pt)加倍,因为其中一半将被删除。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top