Рисование линии с использованием CGContext
Я хочу нарисовать строку в ячейке таблицы, чтобы я мог разместить текстовое поле и переключиться в одну ячейку. Я увеличил высоту клетки. Как я могу провести линию в ячейке?
У меня есть подкласс 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. Благодаря
Ответы
Ответ 1
Две вещи...
Во-первых, вы обычно не рисуете в самой ячейке.
Обычно вы просматриваете содержимое. Иногда это имеет смысл привлечь в ячейку backgroundView или selectedBackgroundView.
[cell.contentView addSubview:drawLine];
Во-вторых, метки по умолчанию для ячейки cell.textLabel и cell.detailTextLabel имеют непрозрачный фон. Попробуйте установить цвета фона на [UIColor clearColor]
.
Изменить: еще одна вещь: вам нужно установить правильный кадр для drawLine
DrawLineView *drawLine = [[DrawLineView alloc]initWithFrame:cell.contentView.bounds];
Ответ 2
Если все, что вы хотите сделать, это нарисовать линию, было бы намного лучше использовать 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];
Ответ 3
Я думаю, что очень упрощенный способ рисования линии - создать 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])))