2012-03-21 12 views
7

私はAndroidロックのようなパターンロックアプリケーションを開発しています。CGContextAddLineToPoint:現在のポイントがありません

私はロックを開くためのポイントの間に線を描きたいが、私が描いていたとき、それはエラーを返します:

<Error>: CGContextAddLineToPoint: no current point

それは、iOS 5.0にし、前に細かい作業ですが、それはエラーを示しています5.1で。

これは私のコードです:

- (void)drawRect:(CGRect)rect 
{ 
NSLog(@"drawrect...%@",NSStringFromCGRect(rect)); 

if (!self._trackPointValue) 
return; 

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetLineWidth(context, 10.0); 
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB(); 
CGFloat components[] = {0.5, 1.0, 0.5, 0.8}; 
CGColorRef color = CGColorCreate(colorspace, components); 
CGContextSetStrokeColorWithColor(context, color); 

CGPoint from; 
UIView *lastDot; 
for (UIView *dotView in self._dotViews) { //_dotViews array of points 
from = dotView.center;  
if (!lastDot) 
{ 
    CGContextMoveToPoint(context, from.x, from.y); 

    } 
else 
{ 
    NSLog(@"from : %@",NSStringFromCGPoint(from)); 
    CGContextAddLineToPoint(context, from.x, from.y); 

} 

lastDot = dotView; 
} 

CGPoint pt = [self._trackPointValue CGPointValue]; //_trackPointValue is current point 

CGContextAddLineToPoint(context, pt.x, pt.y); 

CGContextStrokePath(context); 
CGColorSpaceRelease(colorspace); 
CGColorRelease(color); 

self._trackPointValue = nil;//_trackPointValue is current point 
} 

答えて

0

あなたがそれに点や線の追加を開始する前に、まずCGContextBeginPathでパスを作成する必要があります。

+4

CGContextは、要素を追加できる現在のパス(おそらく空のパス)を常に持っています。 'CGContextBeginPath'が必要なのは、現在のパスを破棄し、新しい空のパスで開始する場合だけです。 –

+0

私はそれを知らなかった、ありがとう。 –

2

この:

UIView *lastDot; 

は次のようになります。

UIView *lastDot = nil; 

初期化されていない自動変数はゴミです。 lastDotがまだ設定されていないとき、あなたのコードはループを通して最初に何か特別なことをしようとしています。最初に明示的にnilに設定する必要があります。

+0

こんにちは、ありがとうございました。偶然、提案を – Pardhu

11

現在のポイントを取得するには、少なくともCGContextMoveToPointが呼び出されてからCGContextAddLineToPointが実行されることを確認する必要があります。

+0

いただきありがとうございます。そのメソッドが呼び出されないように頭の上から何かがありますか?私は同じ問題を抱えていますが、私は絶対に確信しています – d2burke

+0

@ d2burke - CGContextStrokePath()は、行が完成した後でなければ呼び出されていないことを確認してください。 )もう一度。 –

0

最初に来ても、forinメソッドは入ってこないので、メソッド "CGContextMoveToPoint()"を使いこなして、警告を出します。

関連する問題