2016-07-07 18 views
0

CGContextを使用して、最初に三角形を描き、その後に線を描くことによって、漏斗形状を作成しています。私はこれをUIViewサブクラスのdrawRectに実装していますが、線が少しぼやけているので、これを描画する別の方法があるのだろうかと思っています。CGContextに代わるより良い方法はありますか?

override func drawRect(rect: CGRect) { 

     let context: CGContextRef = UIGraphicsGetCurrentContext()! 
     CGContextClearRect(context, rect); 

     let rectWidth: CGFloat = 15 

     // Line 
     CGContextSetRGBStrokeColor(context, 0, 0, 0, 1) 
     CGContextMoveToPoint(context, rectWidth/2, 5) 
     CGContextAddLineToPoint(context, rectWidth/2, 10) 
     CGContextSetStrokeColorWithColor(context, UIColor.blueColor().CGColor) 
     CGContextSetLineCap(context, CGLineCap.Round) 
     CGContextSetLineWidth(context, 3.0) 
     CGContextStrokePath(context) 

     // Triangle 
     CGContextBeginPath(context); 
     CGContextMoveToPoint (context, CGRectGetMinX(rect), CGRectGetMinY(rect)); 
     CGContextAddLineToPoint(context, CGRectGetMidX(rect), 8); 
     CGContextAddLineToPoint(context, CGRectGetMaxX(rect), CGRectGetMinY(rect)); 
     CGContextClosePath(context); 

     UIColor.blueColor().setFill() 
     CGContextFillPath(context); 

    } 

は、この生成されます enter image description here

をしかし、私は、私が設計された画像をインポートする際に、画像は(あなたがiPhoneに伝えることができます)鮮明です: enter image description here

ので、そこにありますこの出力を達成するより良い方法は? CGContextの行は少しぼやけているので、より良い選択肢があるかどうか、その方法の賛否両論は何かを知りたいと思います。

+0

両方の画像が同じようにぼやけています。 – Tricertops

答えて

2

コアグラフィックスは、おそらくあなたが言ったので、ぼやけて描画しています。 CG座標系の整数座標の各ペアの位置は、グリッドライン上に正確にあります。そのような座標の間に1ポイント幅のストロークを描くと、グリッドラインを両側に半分の点で跨ぐストロークが得られます。描画しているビットマップコンテキストのスケールに応じて、完全に陰影を付けられた1列の列ではなく、2列の半影付きピクセル、つまりぼんやりした行が表示される可能性があります。

場合によっては、ピクセル全体の境界線と半ピクセル境界線の間に線を引いている点の一部があるため、1xの表示で線の一部がぼやけて2倍または3倍の表示されます。 AppleのドローイングのドキュメントでPoints versus Pixelsを読んでください。あなたが望む場所にすべての行を揃える座標をオフセットする方法があるでしょう。

関連する問題