使用CGContext绘制线条

时间:2011-03-20 18:37:21

标签: iphone cgcontext

我想在表格视图单元格中绘制线条,以便我可以放置textfield&切换到单个单元格。我增加了细胞的高度。我怎样才能在细胞中划线?

我有UIView的子类,其中包含以下代码

 //Get the CGContext from this view
 CGContextRef context = UIGraphicsGetCurrentContext();
 //Set the stroke (pen) color
 CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
 //Set the width of the pen mark
 CGContextSetLineWidth(context, 1.0);

 // Draw a line
 //Start at this point
 CGContextMoveToPoint(context, 10.0, 30.0);

 //Give instructions to the CGContext
 //(move "pen" around the screen)
 CGContextAddLineToPoint(context, 310.0, 30.0);


 //Draw it
 CGContextStrokePath(context);

然后我有一个tableViewController与分组表格样式。在cellForRowAtIndexPath中,我有以下代码

//code to add textfield
DrawLineView *drawLine = [[DrawLineView alloc]init];
[cell addSubview:drawLine];
//code add switch

但它没有划清界限。我不能使用2个不同的细胞。我得帮助我。这是我第一次处理iphone的图形。感谢

3 个答案:

答案 0 :(得分:19)

如果您要做的只是绘制一条线,那么使用CAShapeLayer,将其传递给一条带有一条线的路径,然后将其作为单元格内容视图的子图层附加将会更好。该表应该比使用自定义drawRect的视图更好。

通过CALayer绘制线条的示例和路径:

// You'll also need the QuartzCore framework added to the project
#import <QuartzCore/QuartzCore.h>

CAShapeLayer *lineShape = nil;
CGMutablePathRef linePath = nil;
linePath = CGPathCreateMutable();
lineShape = [CAShapeLayer layer];

lineShape.lineWidth = 4.0f;
lineShape.lineCap = kCALineCapRound;;
lineShape.strokeColor = [[UIColor blackColor] CGColor];

int x = 0; int y = 0;
int toX = 30; int toY = 40;                            
CGPathMoveToPoint(linePath, NULL, x, y);
CGPathAddLineToPoint(linePath, NULL, toX, toY);

lineShape.path = linePath;
CGPathRelease(linePath);
[self.layer addSublayer:lineShape];

答案 1 :(得分:0)

两件事...... 首先,你通常不会吸引细胞本身。

您通常会进入内容视图。有时候,在单元格的backgroundView或selectedBackgroundView中进行绘制是有意义的。

[cell.contentView addSubview:drawLine];

其次,默认的单元格文本标签cell.textLabel和cell.detailTextLabel具有非透明背景。尝试将其背景颜色设置为[UIColor clearColor]

编辑:还有一件事:你需要为drawLine设置一个合适的框架

DrawLineView *drawLine = [[DrawLineView alloc]initWithFrame:cell.contentView.bounds];

答案 2 :(得分:0)

我认为绘制线条的一种非常简单的方法是创建一个UIView并用所需的颜色填充它,然后相应地选择它的宽度,并将高度设置为1像素,如下所示:

{{1}}