web-dev-qa-db-ja.com

CGContextを使用して線を引く

テーブルビューのセルに線を引き、テキストフィールドとスイッチを1つのセルに配置できるようにします。セルの高さを上げました。セルに線を引くにはどうすればよいですか?

次のコードを含む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のグラフィックスを扱う最初の人です。ありがとう

12
iOSAppDev

2つのこと...まず、通常、セル自体に引き込むことはありません。

通常、コンテンツビューに描画します。セルのbackgroundViewまたはselectedBackgroundViewに描画することが理にかなっている場合があります。

[cell.contentView addSubview:drawLine];

次に、デフォルトのセルテキストラベルcell.textLabelとcell.detailTextLabelの背景は不透明です。背景色を[UIColor clearColor]に設定してみてください。

編集:もう1つ:drawLineに適切なフレームを設定する必要があります

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

線を引くだけの場合は、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];

線を描く非常に簡単な方法は、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
Akshansh Thakur