Нарисуйте линию, используя CGContext - PullRequest
12 голосов
/ 20 марта 2011

Я хочу нарисовать линию в ячейке табличного представления, чтобы я мог поместить текстовое поле и переключиться в одну ячейку. Я увеличил высоту клетки. Как я могу нарисовать линию в клетке?

У меня есть подкласс 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 ]

20 голосов
/ 20 марта 2011

Если все, что вы хотите сделать, это нарисовать линию, было бы намного лучше использовать 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];
0 голосов
/ 08 июля 2016

Я думаю, что очень упрощенный способ рисования линии состоит в том, чтобы создать UIView и залить его желаемым цветом, затем соответственно выбрать его ширину и установить высоту равной 1 пикселю:

var lineView : UIView = {
     let view = UIView()
     view.backgroundColor = UIColor.blackColor()
     view.translatesAutoresizingMaskIntoConstraints = false
     return view
}()


self.view.addSubview(lineView)
self.view.addConstraints(NSLayoutConstraint.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[view]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["view": lineView])))
self.view.addConstraints(NSLayoutConstraint.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-50-[view(1)]", options: NSLayoutFormatOptions(), metrics: nil, views: ["view": lineView])))
0 голосов
/ 20 марта 2011

Две вещи ... Во-первых, вы обычно не рисуете в самой ячейке.

Обычно вы рисуете в представлении содержимого.Иногда имеет смысл рисовать в backgroundView ячейки или selectedBackgroundView.

[cell.contentView addSubview:drawLine];

Во-вторых, текстовые метки ячейки по умолчанию cell.textLabel и cell.detailTextLabel имеют непрозрачный фон.Попробуйте установить их фоновые цвета на [UIColor clearColor].

Редактировать: еще одна вещь: вам нужно установить правильный кадр для вашего drawLine

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